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,1296 @@
1
+ assert('__FILE__') do
2
+ file = __FILE__[-9, 9]
3
+ assert_equal 'syntax.rb', file
4
+ end
5
+
6
+ assert('__LINE__') do
7
+ assert_equal 7, __LINE__
8
+ end
9
+
10
+ assert('super', '11.3.4') do
11
+ assert_raise NoMethodError do
12
+ super
13
+ end
14
+
15
+ class SuperFoo
16
+ def foo
17
+ true
18
+ end
19
+ def bar(*a)
20
+ a
21
+ end
22
+ end
23
+ class SuperBar < SuperFoo
24
+ def foo
25
+ super
26
+ end
27
+ def bar(*a)
28
+ super(*a)
29
+ end
30
+ end
31
+ bar = SuperBar.new
32
+
33
+ assert_true bar.foo
34
+ assert_equal [1,2,3], bar.bar(1,2,3)
35
+ end
36
+
37
+ assert('yield', '11.3.5') do
38
+ # it's syntax error now
39
+ # assert_raise LocalJumpError do
40
+ # yield
41
+ # end
42
+ assert_raise LocalJumpError do
43
+ o = Object.new
44
+ def o.foo
45
+ yield
46
+ end
47
+ o.foo
48
+ end
49
+ end
50
+
51
+ assert('break', '11.5.2.4.3') do
52
+ n = 0
53
+ a = []
54
+ while true
55
+ n += 1
56
+ a.push(n)
57
+ if n > 3
58
+ break
59
+ end
60
+ end
61
+
62
+ assert_equal [1,2,3,4], a
63
+
64
+ n = 0
65
+ a = []
66
+ 6.times do
67
+ n += 1
68
+ a.push(n)
69
+ if n > 3
70
+ break
71
+ end
72
+ end
73
+ assert_equal [1,2,3,4], a
74
+
75
+ a = []
76
+ begin
77
+ while true
78
+ a.push 1
79
+ break
80
+ a.push "NG"
81
+ end
82
+ ensure
83
+ a.push 2
84
+ end
85
+ assert_equal [1, 2], a
86
+
87
+ a = []
88
+ begin
89
+ while true
90
+ a.push 1
91
+ break
92
+ end
93
+ a.push 2
94
+ ensure
95
+ a.push 3
96
+ end
97
+ assert_equal [1, 2, 3], a
98
+
99
+ a = []
100
+ begin
101
+ while true
102
+ begin
103
+ a.push 1
104
+ break
105
+ ensure
106
+ a.push 2
107
+ end
108
+ a.push "NG"
109
+ end
110
+ ensure
111
+ a.push 3
112
+ end
113
+ assert_equal [1, 2, 3], a
114
+
115
+ a = []
116
+ begin
117
+ while true
118
+ begin
119
+ a.push 1
120
+ break
121
+ ensure
122
+ a.push 2
123
+ end
124
+ a.push "NG"
125
+ end
126
+ a.push 3
127
+ ensure
128
+ a.push 4
129
+ end
130
+ assert_equal [1, 2, 3, 4], a
131
+ end
132
+
133
+ assert('redo', '11.5.2.4.5') do
134
+ sum = 0
135
+ for i in 1..10
136
+ sum += i
137
+ i -= 1
138
+ if i > 0
139
+ redo
140
+ end
141
+ end
142
+
143
+ assert_equal 220, sum
144
+
145
+ n = 0
146
+ a = []
147
+ 3.times do
148
+ n += 1
149
+ if n == 2
150
+ redo
151
+ end
152
+ a.push(n)
153
+ end
154
+ assert_equal [1,3,4], a
155
+
156
+ a = []
157
+ limit = 3
158
+ e = RuntimeError.new("!")
159
+ for i in 0...3
160
+ begin
161
+ limit -= 1
162
+ break unless limit > 0
163
+ a.push i * 3 + 1
164
+ raise e
165
+ rescue
166
+ a.push i * 3 + 2
167
+ redo
168
+ ensure
169
+ a.push i * 3 + 3
170
+ end
171
+ end
172
+ assert_equal [1, 2, 3, 1, 2, 3, 3], a
173
+
174
+ a = []
175
+ limit = 3
176
+ e = RuntimeError.new("!")
177
+ for i in 0...3
178
+ a.push i * 4 + 1
179
+ begin
180
+ limit -= 1
181
+ break unless limit > 0
182
+ a.push i * 4 + 2
183
+ raise e
184
+ rescue
185
+ a.push i * 4 + 3
186
+ redo
187
+ ensure
188
+ a.push i * 4 + 4
189
+ end
190
+ end
191
+ assert_equal [1, 2, 3, 4, 1, 2, 3, 4, 1, 4], a
192
+ end
193
+
194
+ assert('Abbreviated variable assignment', '11.4.2.3.2') do
195
+ a ||= 1
196
+ b &&= 1
197
+ c = 1
198
+ c += 2
199
+
200
+ assert_equal 1, a
201
+ assert_nil b
202
+ assert_equal 3, c
203
+ end
204
+
205
+ assert('case expression', '11.5.2.2.4') do
206
+ # case-expression-with-expression, one when-clause
207
+ x = 0
208
+ case "a"
209
+ when "a"
210
+ x = 1
211
+ end
212
+ assert_equal 1, x
213
+
214
+ # case-expression-with-expression, multiple when-clauses
215
+ x = 0
216
+ case "b"
217
+ when "a"
218
+ x = 1
219
+ when "b"
220
+ x = 2
221
+ end
222
+ assert_equal 2, x
223
+
224
+ # no matching when-clause
225
+ x = 0
226
+ case "c"
227
+ when "a"
228
+ x = 1
229
+ when "b"
230
+ x = 2
231
+ end
232
+ assert_equal 0, x
233
+
234
+ # case-expression-with-expression, one when-clause and one else-clause
235
+ a = 0
236
+ case "c"
237
+ when "a"
238
+ x = 1
239
+ else
240
+ x = 3
241
+ end
242
+ assert_equal 3, x
243
+
244
+ # case-expression-without-expression, one when-clause
245
+ x = 0
246
+ case
247
+ when true
248
+ x = 1
249
+ end
250
+ assert_equal 1, x
251
+
252
+ # case-expression-without-expression, multiple when-clauses
253
+ x = 0
254
+ case
255
+ when 0 == 1
256
+ x = 1
257
+ when 1 == 1
258
+ x = 2
259
+ end
260
+ assert_equal 2, x
261
+
262
+ # case-expression-without-expression, one when-clause and one else-clause
263
+ x = 0
264
+ case
265
+ when 0 == 1
266
+ x = 1
267
+ else
268
+ x = 3
269
+ end
270
+ assert_equal 3, x
271
+
272
+ # multiple when-arguments
273
+ x = 0
274
+ case 4
275
+ when 1, 3, 5
276
+ x = 1
277
+ when 2, 4, 6
278
+ x = 2
279
+ end
280
+ assert_equal 2, x
281
+
282
+ # when-argument with splatting argument
283
+ x = :integer
284
+ odds = [ 1, 3, 5, 7, 9 ]
285
+ evens = [ 2, 4, 6, 8 ]
286
+ case 5
287
+ when *odds
288
+ x = :odd
289
+ when *evens
290
+ x = :even
291
+ end
292
+ assert_equal :odd, x
293
+
294
+ true
295
+ end
296
+
297
+ assert('Nested const reference') do
298
+ module Syntax4Const
299
+ CONST1 = "hello world"
300
+ class Const2
301
+ def const1
302
+ CONST1
303
+ end
304
+ end
305
+ end
306
+ assert_equal "hello world", Syntax4Const::CONST1
307
+ assert_equal "hello world", Syntax4Const::Const2.new.const1
308
+ assert_raise(NameError) { Syntax4Const::Object }
309
+ end
310
+
311
+ assert('Abbreviated variable assignment as returns') do
312
+ module Syntax4AbbrVarAsgnAsReturns
313
+ class A
314
+ def b
315
+ @c ||= 1
316
+ end
317
+ end
318
+ end
319
+ assert_equal 1, Syntax4AbbrVarAsgnAsReturns::A.new.b
320
+ end
321
+
322
+ assert('Abbreviated variable assignment of object attribute') do
323
+ module Syntax4AbbrVarAsgnObjectAttr
324
+ class A
325
+ attr_accessor :c
326
+ def b
327
+ self.c ||= 1
328
+ end
329
+ end
330
+ end
331
+ assert_equal 1, Syntax4AbbrVarAsgnObjectAttr::A.new.b
332
+ end
333
+
334
+ assert('Splat and multiple assignment') do
335
+ *a = *[1,2,3]
336
+ b, *c = *[7,8,9]
337
+
338
+ assert_equal [1,2,3], a
339
+ assert_equal 7, b
340
+ assert_equal [8,9], c
341
+
342
+ (a, b), c = [1,2],3
343
+ assert_equal [1,2,3], [a,b,c]
344
+ (a, b), c = 1,2,3
345
+ assert_equal [1,nil,2], [a,b,c]
346
+ end
347
+
348
+ assert('Splat and multiple assignment from variable') do
349
+ a = [1, 2, 3]
350
+ b, *c = a
351
+
352
+ assert_equal 1, b
353
+ assert_equal [2, 3], c
354
+ end
355
+
356
+ assert('Splat and multiple assignment from variables') do
357
+ a = [1, 2, 3]
358
+ b = [4, 5, 6, 7]
359
+ c, d, *e, f, g = *a, *b
360
+
361
+ assert_equal 1, c
362
+ assert_equal 2, d
363
+ assert_equal [3, 4, 5], e
364
+ assert_equal 6, f
365
+ assert_equal 7, g
366
+ end
367
+
368
+ assert('Splat and multiple assignment in for') do
369
+ a = [1, 2, 3, 4, 5, 6, 7]
370
+ for b, c, *d, e, f in [a] do
371
+ end
372
+
373
+ assert_equal 1, b
374
+ assert_equal 2, c
375
+ assert_equal [3, 4, 5], d
376
+ assert_equal 6, e
377
+ assert_equal 7, f
378
+ end
379
+
380
+ assert('Splat without assignment') do
381
+ * = [0]
382
+ a, * = [1, 2]
383
+ assert_equal 1, a
384
+ end
385
+
386
+ assert('multiple assignment (rest)') do
387
+ *a = 0
388
+ assert_equal [0], a
389
+ end
390
+
391
+ assert('multiple assignment (rest+post)') do
392
+ *a, b = 0, 1, 2
393
+ *c, d = 3
394
+
395
+ assert_equal [0, 1], a
396
+ assert_equal 2, b
397
+ assert_equal [], c
398
+ assert_equal 3, d
399
+ end
400
+
401
+ assert('multiple assignment (nosplat array rhs)') do
402
+ a, *b = []
403
+ *c, d = [0]
404
+ e, *f, g = [1, 2]
405
+
406
+ assert_nil a
407
+ assert_equal [], b
408
+ assert_equal [], c
409
+ assert_equal 0, d
410
+ assert_equal 1, e
411
+ assert_equal [], f
412
+ assert_equal 2, g
413
+ end
414
+
415
+ assert('multiple assignment (empty array rhs #3236, #3239)') do
416
+ a,b,*c = []; assert_equal [nil, nil, []], [a, b, c]
417
+ a,b,*c = [1]; assert_equal [1, nil, []], [a, b, c]
418
+ a,b,*c = [nil]; assert_equal [nil,nil, []], [a, b, c]
419
+ a,b,*c = [[]]; assert_equal [[], nil, []], [a, b, c]
420
+ end
421
+
422
+ assert('Return values of case statements') do
423
+ a = [] << case 1
424
+ when 3 then 2
425
+ when 2 then 2
426
+ when 1 then 2
427
+ end
428
+
429
+ b = [] << case 1
430
+ when 2 then 2
431
+ else
432
+ end
433
+
434
+ def fb
435
+ n = 0
436
+ Proc.new do
437
+ n += 1
438
+ case
439
+ when n % 15 == 0
440
+ else n
441
+ end
442
+ end
443
+ end
444
+
445
+ assert_equal [2], a
446
+ assert_equal [nil], b
447
+ assert_equal 1, fb.call
448
+ end
449
+
450
+ assert('Return values of if and case statements') do
451
+ true_clause_value =
452
+ if true
453
+ 1
454
+ else
455
+ case 2
456
+ when 3
457
+ end
458
+ 4
459
+ end
460
+
461
+ assert_equal 1, true_clause_value
462
+ end
463
+
464
+ assert('Return values of no expression case statement') do
465
+ when_value =
466
+ case
467
+ when true
468
+ 1
469
+ end
470
+
471
+ assert_equal 1, when_value
472
+ end
473
+
474
+ assert('splat object in assignment') do
475
+ o = Object.new
476
+ def o.to_a
477
+ nil
478
+ end
479
+ assert_equal [o], (a = *o)
480
+
481
+ def o.to_a
482
+ 1
483
+ end
484
+ assert_raise(TypeError) { a = *o }
485
+
486
+ def o.to_a
487
+ [2]
488
+ end
489
+ assert_equal [2], (a = *o)
490
+ end
491
+
492
+ assert('one-line pattern match') do
493
+ 1 => a
494
+ assert_equal(1, a)
495
+ end
496
+
497
+ assert('splat object in case statement') do
498
+ o = Object.new
499
+ def o.to_a
500
+ nil
501
+ end
502
+ a = case o
503
+ when *o
504
+ 1
505
+ end
506
+ assert_equal 1, a
507
+ end
508
+
509
+ assert('splat in case statement') do
510
+ values = [3,5,1,7,8]
511
+ testa = [1,2,7]
512
+ testb = [5,6]
513
+ resulta = []
514
+ resultb = []
515
+ resultc = []
516
+ values.each do |value|
517
+ case value
518
+ when *testa
519
+ resulta << value
520
+ when *testb
521
+ resultb << value
522
+ else
523
+ resultc << value
524
+ end
525
+ end
526
+
527
+ assert_equal [1,7], resulta
528
+ assert_equal [5], resultb
529
+ assert_equal [3,8], resultc
530
+ end
531
+
532
+ assert('External command execution.') do
533
+ module Kernel
534
+ sym = '`'.to_sym
535
+ alias_method :old_cmd, sym
536
+
537
+ results = []
538
+ define_method(sym) do |str|
539
+ results.push str
540
+ str
541
+ end
542
+
543
+ `test` # NOVAL NODE_XSTR
544
+ `test dynamic #{sym}` # NOVAL NODE_DXSTR
545
+ assert_equal ['test', 'test dynamic `'], results
546
+
547
+ t = `test` # VAL NODE_XSTR
548
+ assert_equal 'test', t
549
+ assert_equal ['test', 'test dynamic `', 'test'], results
550
+
551
+ t = `test dynamic #{sym}` # VAL NODE_DXSTR
552
+ assert_equal 'test dynamic `', t
553
+ assert_equal ['test', 'test dynamic `', 'test', 'test dynamic `'], results
554
+
555
+ results = []
556
+ assert_equal 'test sym test sym test', `test #{:sym} test #{:sym} test`
557
+
558
+ alias_method sym, :old_cmd
559
+ end
560
+ true
561
+ end
562
+
563
+ assert('parenthesed do-block in cmdarg') do
564
+ class ParenDoBlockCmdArg
565
+ def test(block)
566
+ block.call
567
+ end
568
+ end
569
+ x = ParenDoBlockCmdArg.new
570
+ result = x.test (Proc.new do :ok; end)
571
+ assert_equal :ok, result
572
+ end
573
+
574
+ assert('method definition in cmdarg') do
575
+ result = class MethodDefinitionInCmdarg
576
+ def self.bar(arg); arg end
577
+ bar def foo; self.each do end end
578
+ end
579
+ assert_equal(:foo, result)
580
+ end
581
+
582
+ assert('optional argument in the rhs default expressions') do
583
+ class OptArgInRHS
584
+ def foo
585
+ "method called"
586
+ end
587
+ def t(foo = foo)
588
+ foo
589
+ end
590
+ def t2(foo = foo())
591
+ foo
592
+ end
593
+ end
594
+ o = OptArgInRHS.new
595
+ assert_nil(o.t)
596
+ assert_equal("method called", o.t2)
597
+ end
598
+
599
+ assert('optional block argument in the rhs default expressions') do
600
+ assert_nil(Proc.new {|foo = foo| foo}.call)
601
+ end
602
+
603
+ assert('local variable definition in default value and subsequent arguments') do
604
+ def m(a = b = 1, c) [a, b, c] end
605
+ assert_equal([1, 1, :c], m(:c))
606
+ assert_equal([:a, nil, :c], m(:a, :c))
607
+
608
+ def m(a = b = 1, &c) [a, b, c ? true : nil] end
609
+ assert_equal([1, 1, nil], m)
610
+ assert_equal([1, 1, true], m{})
611
+ assert_equal([:a, nil, nil], m(:a))
612
+ assert_equal([:a, nil, true], m(:a){})
613
+ end
614
+
615
+ assert('multiline comments work correctly') do
616
+ =begin
617
+ this is a comment with nothing after begin and end
618
+ =end
619
+ =begin this is a comment
620
+ this is a comment with extra after =begin
621
+ =end
622
+ =begin
623
+ this is a comment that has =end with spaces after it
624
+ =end
625
+ =begin this is a comment
626
+ this is a comment that has extra after =begin and =end with spaces after it
627
+ =end
628
+ line = __LINE__
629
+ =begin this is a comment
630
+ this is a comment that has extra after =begin and =end with tabs after it
631
+ =end xxxxxxxxxxxxxxxxxxxxxxxxxx
632
+ assert_equal(line + 4, __LINE__)
633
+ end
634
+
635
+ assert 'keyword arguments' do
636
+ def m(a, b:1) [a, b] end
637
+ assert_equal [1, 1], m(1)
638
+ assert_equal [1, 2], m(1, b: 2)
639
+
640
+ def m(a, b:) [a, b] end
641
+ assert_equal [1, 2], m(1, b: 2)
642
+ assert_raise(ArgumentError) { m b: 1 }
643
+ assert_raise(ArgumentError) { m 1 }
644
+
645
+ def m(a:) a end
646
+ assert_equal 1, m(a: 1)
647
+ assert_raise(ArgumentError) { m }
648
+ assert_raise(ArgumentError) { m 'a' => 1, a: 1 }
649
+ h = { a: 1 }
650
+ assert_equal 1, m(**h)
651
+
652
+ def m(a: 1) a end
653
+ assert_equal 1, m
654
+ assert_equal 2, m(a: 2)
655
+ assert_raise(ArgumentError) { m 1 }
656
+
657
+ def m(**) end
658
+ assert_nil m
659
+ assert_nil m a: 1, b: 2
660
+ assert_raise(ArgumentError) { m 2 }
661
+
662
+ def m(a, **) a end
663
+ assert_equal 1, m(1)
664
+ assert_equal 1, m(1, a: 2, b: 3)
665
+ assert_raise(ArgumentError) { m('a' => 1, b: 2) }
666
+
667
+ def m(a, **k) [a, k] end
668
+ assert_equal [1, {}], m(1)
669
+ assert_equal [1, {a: 2, b: 3}], m(1, a: 2, b: 3)
670
+ assert_raise(ArgumentError) { m('a' => 1, b: 2) }
671
+
672
+ def m(a=1, **) a end
673
+ assert_equal 1, m
674
+ assert_equal 2, m(2, a: 1, b: 0)
675
+
676
+ def m(a=1, **k) [a, k] end
677
+ assert_equal [1, {}], m
678
+ assert_equal [1, {a: 1}], m(a: 1)
679
+ assert_equal [2, {a: 1, b: 2}], m(2, a: 1, b: 2)
680
+ assert_equal [{a: 1}, {b: 2}], m({a: 1}, b: 2)
681
+ assert_raise(ArgumentError) { m({a: 1}, {b: 2}) }
682
+
683
+ def m(*, a:) a end
684
+ assert_equal 1, m(a: 1)
685
+ assert_equal 3, m(1, 2, a: 3)
686
+ assert_raise(ArgumentError) { m('a' => 1, a: 2) }
687
+
688
+ def m(*a, b:) [a, b] end
689
+ assert_equal [[], 1], m(b: 1)
690
+ assert_equal [[1, 2], 3], m(1, 2, b: 3)
691
+ assert_raise(ArgumentError) { m('a' => 1, b: 2) }
692
+
693
+ def m(*a, b: 1) [a, b] end
694
+ assert_equal [[], 1], m
695
+ assert_equal [[1, 2, 3], 4], m(1, 2, 3, b: 4)
696
+ assert_raise(ArgumentError) { m('a' => 1, b: 2) }
697
+
698
+ def m(*, **) end
699
+ assert_nil m()
700
+ assert_nil m(a: 1, b: 2)
701
+ assert_nil m(1, 2, 3, a: 4, b: 5)
702
+
703
+ def m(*a, **) a end
704
+ assert_equal [], m()
705
+ assert_equal [1, 2, 3], m(1, 2, 3, a: 4, b: 5)
706
+ assert_equal [1], m(1, **{a: 2})
707
+
708
+ def m(*, **k) k end
709
+ assert_equal({}, m())
710
+ assert_equal({a: 4, b: 5}, m(1, 2, 3, a: 4, b: 5))
711
+
712
+ def m(a = nil, b = nil, **k) [a, k] end
713
+ assert_equal [nil, {}], m()
714
+ assert_equal([nil, {a: 1}], m(a: 1))
715
+ assert_equal([{"a" => 1}, {a: 1}], m({ "a" => 1 }, a: 1))
716
+ assert_equal([{a: 1}, {}], m({a: 1}, {}))
717
+ assert_equal([{}, {}], m({}))
718
+
719
+ def m(*a, **k) [a, k] end
720
+ assert_equal([[], {}], m())
721
+ assert_equal([[1], {}], m(1))
722
+ assert_equal([[], {a: 1, b: 2}], m(a: 1, b: 2))
723
+ assert_equal([[1, 2, 3], {a: 2}], m(1, 2, 3, a: 2))
724
+ assert_equal([[], {a: 1}], m(a: 1))
725
+ assert_equal([[{"a" => 1}], {a: 1}], m({ "a" => 1 }, a: 1))
726
+ assert_equal([[{a: 1}, {}], {}], m({a: 1}, {}))
727
+
728
+ def m(a:, b:) [a, b] end
729
+ assert_equal([1, 2], m(a: 1, b: 2))
730
+ assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) }
731
+
732
+ def m(a:, b: 1) [a, b] end
733
+ assert_equal([1, 1], m(a: 1))
734
+ assert_equal([1, 2], m(a: 1, b: 2))
735
+ assert_raise(ArgumentError) { m(b: 1) }
736
+ assert_raise(ArgumentError) { m("a" => 1, a: 1, b: 2) }
737
+
738
+ def m(a:, **) a end
739
+ assert_equal(1, m(a: 1))
740
+ assert_equal(1, m(a: 1, b: 2))
741
+
742
+ def m(a:, **k) [a, k] end
743
+ assert_equal([1, {}], m(a: 1))
744
+ assert_equal([1, {b: 2, c: 3}], m(a: 1, b: 2, c: 3))
745
+
746
+ def m(a:, &b) [a, b] end
747
+ assert_equal([1, nil], m(a: 1))
748
+ result = m(a: 1, &(l = ->{}))
749
+ assert_equal([1, l], result)
750
+
751
+ def m(a: 1, b:) [a, b] end
752
+ assert_equal([1, 0], m(b: 0))
753
+ assert_equal([3, 2], m(b: 2, a: 3))
754
+ assert_raise(ArgumentError) { m a: 1 }
755
+
756
+ def m(a: def m(a: 1) a end, b:)
757
+ [a, b]
758
+ end
759
+ assert_equal([2, 3], m(a: 2, b: 3))
760
+ assert_equal([:m, 1], m(b: 1))
761
+ # Note the default value of a: in the original method.
762
+ assert_equal(1, m())
763
+
764
+ def m(a: 1, b: 2) [a, b] end
765
+ assert_equal([1, 2], m())
766
+ assert_equal([4, 3], m(b: 3, a: 4))
767
+
768
+ def m(a: 1, **) a end
769
+ assert_equal(1, m())
770
+ assert_equal(2, m(a: 2, b: 1))
771
+
772
+ def m(a: 1, **k) [a, k] end
773
+ assert_equal([1, {b: 2, c: 3}], m(b: 2, c: 3))
774
+
775
+ def m(a:, **) yield end
776
+ assert_raise(ArgumentError) { m { :blk } }
777
+ assert_equal :blk, m(a: 1){ :blk }
778
+
779
+ def m(a:, **k, &b) [b.call, k] end
780
+ assert_raise(ArgumentError) { m { :blk } }
781
+ assert_equal [:blk, {b: 2}], m(a: 1, b: 2){ :blk }
782
+
783
+ def m(**k, &b) [k, b] end
784
+ assert_equal([{ a: 1, b: 2}, nil], m(a: 1, b: 2))
785
+ assert_equal :blk, m{ :blk }[1].call
786
+
787
+ =begin
788
+ def m(a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l)
789
+ [a, b, c, d, e, f, g, h, k, l]
790
+ end
791
+ result = m(9, 8, 7, 6, f: 5, g: 4, h: 3, &(l = ->{}))
792
+ assert_equal([9, 8, [7], [], 6, 5, 4, 3, {}, l], result)
793
+ def m a, b=1, *c, d, e:, f: 2, g:, **k, &l
794
+ [a, b, c, d, e, f, g, k, l]
795
+ end
796
+ result = m(1, 2, e: 3, g: 4, h: 5, i: 6, &(l = ->{}))
797
+ assert_equal([1, 1, [], 2, 3, 2, 4, { h: 5, i: 6 }, l], result)
798
+ =end
799
+
800
+ def m(a: b = 1, c:) [a, b, c] end
801
+ assert_equal([1, 1, :c], m(c: :c))
802
+ assert_equal([:a, nil, :c], m(a: :a, c: :c))
803
+ end
804
+
805
+ assert('numbered parameters') do
806
+ assert_equal(15, [1,2,3,4,5].reduce {_1+_2})
807
+ assert_equal(45, Proc.new do _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 end.call(*[1, 2, 3, 4, 5, 6, 7, 8, 9]))
808
+ assert_equal(5, -> { _1 }.call(5))
809
+ end
810
+
811
+ assert('_0 is not numbered parameter') do
812
+ _0 = :l
813
+ assert_equal(:l, ->{_0}.call)
814
+ end
815
+
816
+ assert('numbered parameters in symbol name (https://github.com/mruby/mruby/issues/5295)') do
817
+ assert_equal([:_1], Array.new(1) {:_1})
818
+ end
819
+
820
+ assert('numbered parameters as hash key') do
821
+ h = {_1: 3}
822
+ assert_equal(3, h[:_1])
823
+ assert_equal(7, -> { _1 }.call(7))
824
+ end
825
+
826
+ assert('numbered parameters as singleton') do
827
+ o = Object.new
828
+ lambda { def _1.a(b) = "a#{b}" }.call(o)
829
+ assert_equal('ab', o.a('b'))
830
+ end
831
+
832
+ assert('argument forwarding') do
833
+ c = Class.new {
834
+ def a0(*a,&b)
835
+ assert_equal([1,2,3], a)
836
+ assert_not_nil(b)
837
+ end
838
+ def a(...)
839
+ a0(...)
840
+ end
841
+ def b(a,...)
842
+ assert_equal(a,1)
843
+ a0(1,...)
844
+ end
845
+ def c ...
846
+ a(...)
847
+ end
848
+ def d a,...
849
+ assert_equal(a,1)
850
+ b(1,...)
851
+ end
852
+ }
853
+ o = c.new
854
+ o.a(1,2,3){}
855
+ o.b(1,2,3){}
856
+ o.c(1,2,3){}
857
+ o.d(1,2,3){}
858
+ end
859
+
860
+ assert('endless def') do
861
+ c = Class.new {
862
+ def m1 = 42
863
+ def m2() = 42
864
+ def m3(x) = x+1
865
+ def self.s1 = 42
866
+ def self.s2() = 42
867
+ def self.s3(x) = x + 1
868
+ def cm1 = m3 42
869
+ def cm2() = m3 42
870
+ def cm3(x) = m3 x+1
871
+ def self.cs1 = s3 42
872
+ def self.cs2() = s3 42
873
+ def self.cs3(x) = s3 x + 1
874
+ }
875
+ o = c.new
876
+ assert_equal(42, o.m1)
877
+ assert_equal(43, o.m3(o.m2))
878
+ assert_equal(42, c.s1)
879
+ assert_equal(43, c.s3(c.s2))
880
+ assert_equal(43, o.cm1)
881
+ assert_equal(45, o.cm3(o.cm2))
882
+ assert_equal(43, c.cs1)
883
+ assert_equal(45, c.cs3(c.cs2))
884
+ end
885
+
886
+ assert('at-least-once loop') do
887
+ # basic at-least-once loop that executes once
888
+ count = 0
889
+ begin
890
+ count += 1
891
+ end while false
892
+ assert_equal 1, count
893
+
894
+ # at-least-once loop with true condition
895
+ count = 0
896
+ begin
897
+ count += 1
898
+ end while count < 3
899
+ assert_equal 3, count
900
+
901
+ # at-least-once loop with break
902
+ count = 0
903
+ begin
904
+ count += 1
905
+ break if count == 2
906
+ end while count < 10
907
+ assert_equal 2, count
908
+
909
+ # at-least-once loop with next
910
+ count = 0
911
+ sum = 0
912
+ begin
913
+ count += 1
914
+ if count == 2
915
+ next
916
+ end
917
+ sum += count
918
+ end while count < 4
919
+ assert_equal 4, count
920
+ assert_equal 8, sum # 1 + 3 + 4 = 8 (skipped 2)
921
+
922
+ # nested at-least-once loops
923
+ outer_count = 0
924
+ total = 0
925
+ begin
926
+ outer_count += 1
927
+ inner_count = 0
928
+ begin
929
+ inner_count += 1
930
+ total += inner_count
931
+ end while inner_count < 2
932
+ end while outer_count < 2
933
+ assert_equal 2, outer_count
934
+ assert_equal 6, total # (1+2) + (1+2) = 6
935
+
936
+ # at-least-once loop with exception handling
937
+ count = 0
938
+ begin
939
+ count += 1
940
+ raise "error" if count == 2
941
+ rescue
942
+ count += 10
943
+ end while count < 5
944
+ assert_equal 12, count # 1, then 2+10=12
945
+ end
946
+
947
+ assert('pattern matching - basic case/in') do
948
+ # literal patterns
949
+ result = case 1
950
+ in 1 then :one
951
+ in 2 then :two
952
+ end
953
+ assert_equal :one, result
954
+
955
+ # variable binding
956
+ case 42
957
+ in x
958
+ assert_equal 42, x
959
+ end
960
+
961
+ # else clause
962
+ result = case 3
963
+ in 1 then :one
964
+ in 2 then :two
965
+ else :other
966
+ end
967
+ assert_equal :other, result
968
+ end
969
+
970
+ assert('pattern matching - array patterns') do
971
+ # simple array pattern
972
+ case [1, 2, 3]
973
+ in [a, b, c]
974
+ assert_equal 1, a
975
+ assert_equal 2, b
976
+ assert_equal 3, c
977
+ end
978
+
979
+ # array pattern with rest
980
+ case [1, 2, 3, 4, 5]
981
+ in [first, *rest]
982
+ assert_equal 1, first
983
+ assert_equal [2, 3, 4, 5], rest
984
+ end
985
+
986
+ # array pattern with rest in middle
987
+ case [1, 2, 3, 4, 5]
988
+ in [first, *middle, last]
989
+ assert_equal 1, first
990
+ assert_equal [2, 3, 4], middle
991
+ assert_equal 5, last
992
+ end
993
+
994
+ # nested array pattern
995
+ case [[1, 2], [3, 4]]
996
+ in [[a, b], [c, d]]
997
+ assert_equal [1, 2, 3, 4], [a, b, c, d]
998
+ end
999
+
1000
+ # array pattern with literal match
1001
+ result = case [1, 2, 3]
1002
+ in [1, 2, x]
1003
+ x
1004
+ end
1005
+ assert_equal 3, result
1006
+ end
1007
+
1008
+ assert('pattern matching - find patterns') do
1009
+ # find pattern - element at end
1010
+ case [1, 2, 3]
1011
+ in [*pre, 3, *post]
1012
+ assert_equal [1, 2], pre
1013
+ assert_equal [], post
1014
+ end
1015
+
1016
+ # find pattern - element at beginning
1017
+ case [1, 2, 3]
1018
+ in [*pre, 1, *post]
1019
+ assert_equal [], pre
1020
+ assert_equal [2, 3], post
1021
+ end
1022
+
1023
+ # find pattern - element in middle
1024
+ case [1, 2, 3, 4, 5]
1025
+ in [*pre, 3, *post]
1026
+ assert_equal [1, 2], pre
1027
+ assert_equal [4, 5], post
1028
+ end
1029
+
1030
+ # find pattern - multiple middle elements
1031
+ case [1, 2, 3, 4, 5]
1032
+ in [*pre, 2, 3, *post]
1033
+ assert_equal [1], pre
1034
+ assert_equal [4, 5], post
1035
+ end
1036
+
1037
+ # find pattern - anonymous rest
1038
+ result = case [1, 2, 3, 4, 5]
1039
+ in [*, 3, *]
1040
+ :found
1041
+ else
1042
+ :not_found
1043
+ end
1044
+ assert_equal :found, result
1045
+
1046
+ # find pattern - no match
1047
+ result = case [1, 2, 4, 5]
1048
+ in [*pre, 3, *post]
1049
+ :found
1050
+ else
1051
+ :not_found
1052
+ end
1053
+ assert_equal :not_found, result
1054
+
1055
+ # find pattern with literal values
1056
+ case [1, 2, 3, 4, 5]
1057
+ in [*pre, 2, x, *post]
1058
+ assert_equal [1], pre
1059
+ assert_equal 3, x
1060
+ assert_equal [4, 5], post
1061
+ end
1062
+ end
1063
+
1064
+ assert('pattern matching - hash patterns') do
1065
+ # simple hash pattern
1066
+ case {a: 1, b: 2}
1067
+ in {a: x, b: y}
1068
+ assert_equal 1, x
1069
+ assert_equal 2, y
1070
+ end
1071
+
1072
+ # shorthand hash pattern
1073
+ case {a: 1, b: 2}
1074
+ in {a:, b:}
1075
+ assert_equal 1, a
1076
+ assert_equal 2, b
1077
+ end
1078
+
1079
+ # hash pattern with extra keys (partial match)
1080
+ case {a: 1, b: 2, c: 3}
1081
+ in {a: x}
1082
+ assert_equal 1, x
1083
+ end
1084
+
1085
+ # hash pattern with rest (captures unmatched keys)
1086
+ case {a: 1, b: 2, c: 3}
1087
+ in {a:, **rest}
1088
+ assert_equal 1, a
1089
+ assert_equal({b: 2, c: 3}, rest)
1090
+ end
1091
+
1092
+ # hash value extraction
1093
+ h = {user: "Alice"}
1094
+ case h
1095
+ in {user: u}
1096
+ assert_equal "Alice", u
1097
+ end
1098
+ end
1099
+
1100
+ assert('pattern matching - guard clauses') do
1101
+ # if guard
1102
+ result = case 10
1103
+ in x if x > 5
1104
+ :big
1105
+ in x
1106
+ :small
1107
+ end
1108
+ assert_equal :big, result
1109
+
1110
+ # unless guard
1111
+ result = case 3
1112
+ in x unless x > 5
1113
+ :small
1114
+ in x
1115
+ :big
1116
+ end
1117
+ assert_equal :small, result
1118
+
1119
+ # guard with pattern
1120
+ result = case [1, 2, 3]
1121
+ in [a, b, c] if a + b + c > 5
1122
+ :sum_big
1123
+ in [a, b, c]
1124
+ :sum_small
1125
+ end
1126
+ assert_equal :sum_big, result
1127
+ end
1128
+
1129
+ assert('pattern matching - alternative patterns') do
1130
+ # simple alternatives
1131
+ result = case 2
1132
+ in 1 | 2 | 3
1133
+ :found
1134
+ else
1135
+ :not_found
1136
+ end
1137
+ assert_equal :found, result
1138
+
1139
+ # alternatives in array
1140
+ result = case [1, 2]
1141
+ in [1, 2] | [3, 4]
1142
+ :match
1143
+ else
1144
+ :no_match
1145
+ end
1146
+ assert_equal :match, result
1147
+ end
1148
+
1149
+ assert('pattern matching - pin operator') do
1150
+ x = 1
1151
+ # pin matches exact value
1152
+ result = case 1
1153
+ in ^x
1154
+ :matched
1155
+ else
1156
+ :not_matched
1157
+ end
1158
+ assert_equal :matched, result
1159
+
1160
+ # pin in array pattern
1161
+ expected = 42
1162
+ case [42, 100]
1163
+ in [^expected, y]
1164
+ assert_equal 100, y
1165
+ end
1166
+
1167
+ # pin prevents rebinding
1168
+ a = 1
1169
+ result = case 2
1170
+ in ^a
1171
+ :same
1172
+ else
1173
+ :different
1174
+ end
1175
+ assert_equal :different, result
1176
+ end
1177
+
1178
+ assert('pattern matching - as pattern') do
1179
+ # bind entire match
1180
+ case [1, 2, 3]
1181
+ in [x, *rest] => whole
1182
+ assert_equal 1, x
1183
+ assert_equal [2, 3], rest
1184
+ assert_equal [1, 2, 3], whole
1185
+ end
1186
+
1187
+ # as pattern with hash
1188
+ case {a: 1, b: 2}
1189
+ in {a:} => h
1190
+ assert_equal 1, a
1191
+ assert_equal({a: 1, b: 2}, h)
1192
+ end
1193
+ end
1194
+
1195
+ assert('pattern matching - one-line in') do
1196
+ # basic true/false
1197
+ assert_true((1 in 1))
1198
+ assert_false((1 in 2))
1199
+
1200
+ # with variable binding
1201
+ assert_true(([1, 2] in [x, y]))
1202
+
1203
+ # in conditional
1204
+ matched = false
1205
+ if [1, 2, 3] in [a, *rest]
1206
+ matched = true
1207
+ end
1208
+ assert_true matched
1209
+
1210
+ # with hash
1211
+ assert_true(({a: 1} in {a: 1}))
1212
+ assert_false(({a: 1} in {a: 2}))
1213
+ end
1214
+
1215
+ assert('pattern matching - one-line =>') do
1216
+ # simple binding
1217
+ 1 => x
1218
+ assert_equal 1, x
1219
+
1220
+ # array destructuring
1221
+ [1, 2, 3] => [a, b, c]
1222
+ assert_equal [1, 2, 3], [a, b, c]
1223
+
1224
+ # hash destructuring
1225
+ {name: "Bob", age: 25} => {name:, age:}
1226
+ assert_equal "Bob", name
1227
+ assert_equal 25, age
1228
+
1229
+ # with rest
1230
+ [1, 2, 3, 4] => [first, *middle, last]
1231
+ assert_equal 1, first
1232
+ assert_equal [2, 3], middle
1233
+ assert_equal 4, last
1234
+ end
1235
+
1236
+ assert('pattern matching - NoMatchingPatternError') do
1237
+ # => raises on mismatch
1238
+ assert_raise(NoMatchingPatternError) do
1239
+ 1 => 2
1240
+ end
1241
+
1242
+ # can be rescued
1243
+ begin
1244
+ [1, 2] => [1, 2, 3]
1245
+ rescue NoMatchingPatternError => e
1246
+ assert_true e.message.is_a?(String)
1247
+ end
1248
+
1249
+ # case/in without else returns nil (no match)
1250
+ result = case 5
1251
+ in 1 then :one
1252
+ in 2 then :two
1253
+ end
1254
+ assert_nil result
1255
+ end
1256
+
1257
+ assert('pattern matching - complex patterns') do
1258
+ # array of hashes
1259
+ records = [{id: 1, value: "a"}, {id: 2, value: "b"}]
1260
+ case records
1261
+ in [first, second]
1262
+ assert_equal({id: 1, value: "a"}, first)
1263
+ assert_equal({id: 2, value: "b"}, second)
1264
+ end
1265
+
1266
+ # hash with array value
1267
+ data = {items: [1, 2, 3]}
1268
+ case data
1269
+ in {items: [a, *rest]}
1270
+ assert_equal 1, a
1271
+ assert_equal [2, 3], rest
1272
+ end
1273
+ end
1274
+
1275
+ assert('&nil in formal parameters') do
1276
+ def m(&nil); end
1277
+ m
1278
+ m(&nil)
1279
+ assert_raise(ArgumentError) { m {} }
1280
+
1281
+ def m2(a, b, &nil); end
1282
+ m2(1, 2)
1283
+ assert_raise(ArgumentError) { m2(1, 2) {} }
1284
+
1285
+ def m3(a, b=1, *c, &nil); end
1286
+ m3(1)
1287
+ assert_raise(ArgumentError) { m3(1) {} }
1288
+
1289
+ def m4(a:, &nil); end
1290
+ m4(a: 1)
1291
+ assert_raise(ArgumentError) { m4(a: 1) {} }
1292
+
1293
+ f = ->(&nil) { :ok }
1294
+ assert_equal :ok, f.call
1295
+ assert_raise(ArgumentError) { f.call {} }
1296
+ end