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,1131 @@
1
+ class Addrinfo
2
+ #
3
+ # call-seq:
4
+ # Addrinfo.new(sockaddr, family=Socket::PF_UNSPEC, socktype=0, protocol=0) -> addrinfo
5
+ #
6
+ # Creates a new Addrinfo object from socket address information.
7
+ # sockaddr can be a packed sockaddr string or an array representation.
8
+ #
9
+ # Addrinfo.new(Socket.sockaddr_in(80, "127.0.0.1"))
10
+ # Addrinfo.new(["AF_INET", 80, "localhost", "127.0.0.1"])
11
+ # Addrinfo.new(["AF_UNIX", "/tmp/socket"])
12
+ #
13
+ def initialize(sockaddr, family=Socket::PF_UNSPEC, socktype=0, protocol=0)
14
+ @hostname = nil
15
+ if sockaddr.is_a? Array
16
+ sary = sockaddr
17
+ if sary[0] == 'AF_INET' || sary[0] == 'AF_INET6'
18
+ @sockaddr = Socket.sockaddr_in(sary[1], sary[3])
19
+ @hostname = sary[2]
20
+ elsif sary[0] == 'AF_UNIX'
21
+ @sockaddr = Socket.sockaddr_un(sary[1])
22
+ end
23
+ else
24
+ @sockaddr = sockaddr.dup
25
+ end
26
+ if family == Socket::PF_UNSPEC or family == nil
27
+ @family = Socket._sockaddr_family(@sockaddr)
28
+ else
29
+ @family = family
30
+ end
31
+ @socktype = socktype
32
+ @protocol = protocol
33
+ end
34
+
35
+ #
36
+ # call-seq:
37
+ # Addrinfo.foreach(nodename, service, family=nil, socktype=nil, protocol=nil, flags=0) { |addrinfo| block } -> array
38
+ #
39
+ # Iterates over all address information for the given nodename and service.
40
+ # Returns an array of Addrinfo objects.
41
+ #
42
+ # Addrinfo.foreach("www.example.com", "http") { |ai| puts ai.ip_address }
43
+ # Addrinfo.foreach("localhost", 80) { |ai| puts ai.inspect }
44
+ #
45
+ def self.foreach(nodename, service, family=nil, socktype=nil, protocol=nil, flags=0, &block)
46
+ a = self.getaddrinfo(nodename, service, family, socktype, protocol, flags)
47
+ a.each {|ai| block.call(ai) }
48
+ a
49
+ end
50
+
51
+ #
52
+ # call-seq:
53
+ # Addrinfo.ip(host) -> addrinfo
54
+ #
55
+ # Creates an Addrinfo object for the given host with port 0.
56
+ # Useful for creating address info without specifying a port.
57
+ #
58
+ # Addrinfo.ip("127.0.0.1") #=> #<Addrinfo: 127.0.0.1:0>
59
+ # Addrinfo.ip("::1") #=> #<Addrinfo: [::1]:0>
60
+ #
61
+ def self.ip(host)
62
+ Addrinfo.new(Socket.sockaddr_in(0, host))
63
+ end
64
+
65
+ #
66
+ # call-seq:
67
+ # Addrinfo.tcp(host, port) -> addrinfo
68
+ #
69
+ # Creates an Addrinfo object for TCP connection to the given host and port.
70
+ #
71
+ # Addrinfo.tcp("localhost", 80) #=> #<Addrinfo: 127.0.0.1:80 TCP>
72
+ # Addrinfo.tcp("www.example.com", 443) #=> #<Addrinfo: 93.184.216.34:443 TCP>
73
+ #
74
+ def self.tcp(host, port)
75
+ Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_STREAM, Socket::IPPROTO_TCP)[0]
76
+ end
77
+
78
+ #
79
+ # call-seq:
80
+ # Addrinfo.udp(host, port) -> addrinfo
81
+ #
82
+ # Creates an Addrinfo object for UDP connection to the given host and port.
83
+ #
84
+ # Addrinfo.udp("localhost", 53) #=> #<Addrinfo: 127.0.0.1:53 UDP>
85
+ # Addrinfo.udp("8.8.8.8", 53) #=> #<Addrinfo: 8.8.8.8:53 UDP>
86
+ #
87
+ def self.udp(host, port)
88
+ Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_DGRAM, Socket::IPPROTO_UDP)[0]
89
+ end
90
+
91
+ #
92
+ # call-seq:
93
+ # Addrinfo.unix(path, socktype=Socket::SOCK_STREAM) -> addrinfo
94
+ #
95
+ # Creates an Addrinfo object for Unix domain socket at the given path.
96
+ #
97
+ # Addrinfo.unix("/tmp/socket") #=> #<Addrinfo: /tmp/socket SOCK_STREAM>
98
+ # Addrinfo.unix("/var/run/daemon.sock", Socket::SOCK_DGRAM) #=> #<Addrinfo: /var/run/daemon.sock SOCK_DGRAM>
99
+ #
100
+ def self.unix(path, socktype=Socket::SOCK_STREAM)
101
+ Addrinfo.new(Socket.sockaddr_un(path), Socket::AF_UNIX, socktype)
102
+ end
103
+
104
+ #
105
+ # call-seq:
106
+ # addrinfo.afamily -> integer
107
+ #
108
+ # Returns the address family of the socket address.
109
+ #
110
+ # Addrinfo.tcp("localhost", 80).afamily #=> 2 (AF_INET)
111
+ # Addrinfo.unix("/tmp/sock").afamily #=> 1 (AF_UNIX)
112
+ #
113
+ #
114
+ # call-seq:
115
+ # addrinfo.afamily -> integer
116
+ #
117
+ # Returns the address family of the socket address.
118
+ #
119
+ # Addrinfo.tcp("localhost", 80).afamily #=> 2 (AF_INET)
120
+ # Addrinfo.unix("/tmp/sock").afamily #=> 1 (AF_UNIX)
121
+ #
122
+ def afamily
123
+ @family
124
+ end
125
+
126
+ #def bind
127
+ #def canonname
128
+ #def connect
129
+ #def connect_from
130
+ #def connect_to
131
+
132
+ #def family_addrinfo(host, port=nil)
133
+ #def getnameinfo(flags=0)
134
+ # Socket.getnameinfo
135
+ #end
136
+
137
+ #
138
+ # call-seq:
139
+ # addrinfo.inspect -> string
140
+ #
141
+ # Returns a string representation of the Addrinfo object.
142
+ #
143
+ # Addrinfo.tcp("localhost", 80).inspect #=> "#<Addrinfo: 127.0.0.1:80 TCP>"
144
+ # Addrinfo.unix("/tmp/sock").inspect #=> "#<Addrinfo: /tmp/sock SOCK_STREAM>"
145
+ #
146
+ def inspect
147
+ if ipv4? or ipv6?
148
+ if @protocol == Socket::IPPROTO_TCP or (@socktype == Socket::SOCK_STREAM and @protocol == 0)
149
+ proto = 'TCP'
150
+ elsif @protocol == Socket::IPPROTO_UDP or (@socktype == Socket::SOCK_DGRAM and @protocol == 0)
151
+ proto = 'UDP'
152
+ else
153
+ proto = '???'
154
+ end
155
+ else
156
+ proto = "SOCK_STREAM"
157
+ end
158
+ "#<Addrinfo: #{inspect_sockaddr} #{proto}>"
159
+ end
160
+
161
+ #
162
+ # call-seq:
163
+ # addrinfo.inspect_sockaddr -> string
164
+ #
165
+ # Returns a string representation of the socket address portion.
166
+ #
167
+ # Addrinfo.tcp("localhost", 80).inspect_sockaddr #=> "127.0.0.1:80"
168
+ # Addrinfo.unix("/tmp/sock").inspect_sockaddr #=> "/tmp/sock"
169
+ #
170
+ def inspect_sockaddr
171
+ if ipv4?
172
+ a, p = ip_unpack
173
+ "#{a}:#{p}"
174
+ elsif ipv6?
175
+ a, p = ip_unpack
176
+ "[#{a}]:#{p}"
177
+ elsif unix?
178
+ unix_path
179
+ else
180
+ '???'
181
+ end
182
+ end
183
+
184
+ #
185
+ # call-seq:
186
+ # addrinfo.ip? -> true or false
187
+ #
188
+ # Returns true if the address is an IP address (IPv4 or IPv6).
189
+ #
190
+ # Addrinfo.tcp("localhost", 80).ip? #=> true
191
+ # Addrinfo.unix("/tmp/sock").ip? #=> false
192
+ #
193
+ def ip?
194
+ ipv4? or ipv6?
195
+ end
196
+
197
+ #
198
+ # call-seq:
199
+ # addrinfo.ip_address -> string
200
+ #
201
+ # Returns the IP address as a string. Raises an exception if not an IP address.
202
+ #
203
+ # Addrinfo.tcp("localhost", 80).ip_address #=> "127.0.0.1"
204
+ # Addrinfo.udp("::1", 53).ip_address #=> "::1"
205
+ #
206
+ def ip_address
207
+ ip_unpack[0]
208
+ end
209
+
210
+ #
211
+ # call-seq:
212
+ # addrinfo.ip_port -> integer
213
+ #
214
+ # Returns the port number. Raises an exception if not an IP address.
215
+ #
216
+ # Addrinfo.tcp("localhost", 80).ip_port #=> 80
217
+ # Addrinfo.udp("127.0.0.1", 53).ip_port #=> 53
218
+ #
219
+ def ip_port
220
+ ip_unpack[1]
221
+ end
222
+
223
+ #
224
+ # call-seq:
225
+ # addrinfo.ip_unpack -> [ip_address, port]
226
+ #
227
+ # Returns an array containing the IP address and port number.
228
+ #
229
+ # Addrinfo.tcp("localhost", 80).ip_unpack #=> ["127.0.0.1", 80]
230
+ # Addrinfo.udp("::1", 53).ip_unpack #=> ["::1", 53]
231
+ #
232
+ def ip_unpack
233
+ h, p = getnameinfo(Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
234
+ [ h, p.to_i ]
235
+ end
236
+
237
+ #
238
+ # call-seq:
239
+ # addrinfo.ipv4? -> true or false
240
+ #
241
+ # Returns true if the address is an IPv4 address.
242
+ #
243
+ # Addrinfo.tcp("127.0.0.1", 80).ipv4? #=> true
244
+ # Addrinfo.tcp("::1", 80).ipv4? #=> false
245
+ #
246
+ def ipv4?
247
+ @family == Socket::AF_INET
248
+ end
249
+
250
+ #def ipv4_loopback?
251
+ #def ipv4_multicast?
252
+ #def ipv4_private?
253
+
254
+ #
255
+ # call-seq:
256
+ # addrinfo.ipv6? -> true or false
257
+ #
258
+ # Returns true if the address is an IPv6 address.
259
+ #
260
+ # Addrinfo.tcp("::1", 80).ipv6? #=> true
261
+ # Addrinfo.tcp("127.0.0.1", 80).ipv6? #=> false
262
+ #
263
+ def ipv6?
264
+ @family == Socket::AF_INET6
265
+ end
266
+
267
+ #def ipv6_loopback?
268
+ #def ipv6_mc_global?
269
+ #def ipv6_mc_linklocal?
270
+ #def ipv6_mc_nodelocal?
271
+ #def ipv6_mc_orilocal?
272
+ #def ipv6_mc_sitelocal?
273
+ #def ipv6_multicast?
274
+ #def ipv6_to_ipv4
275
+ #def ipv6_unspecified
276
+ #def ipv6_v4compat?
277
+ #def ipv6_v4mapped?
278
+ #def listen(backlog=5)
279
+
280
+ #
281
+ # call-seq:
282
+ # addrinfo.pfamily -> integer
283
+ #
284
+ # Returns the protocol family (same as afamily).
285
+ #
286
+ # Addrinfo.tcp("localhost", 80).pfamily #=> 2 (PF_INET)
287
+ # Addrinfo.unix("/tmp/sock").pfamily #=> 1 (PF_UNIX)
288
+ #
289
+ def pfamily
290
+ @family
291
+ end
292
+
293
+ #
294
+ # call-seq:
295
+ # addrinfo.protocol -> integer
296
+ #
297
+ # Returns the protocol number.
298
+ #
299
+ # Addrinfo.tcp("localhost", 80).protocol #=> 6 (IPPROTO_TCP)
300
+ # Addrinfo.udp("localhost", 53).protocol #=> 17 (IPPROTO_UDP)
301
+ #
302
+ attr_reader :protocol
303
+
304
+ #
305
+ # call-seq:
306
+ # addrinfo.socktype -> integer
307
+ #
308
+ # Returns the socket type.
309
+ #
310
+ # Addrinfo.tcp("localhost", 80).socktype #=> 1 (SOCK_STREAM)
311
+ # Addrinfo.udp("localhost", 53).socktype #=> 2 (SOCK_DGRAM)
312
+ #
313
+ attr_reader :socktype
314
+
315
+ #
316
+ # call-seq:
317
+ # addrinfo._to_array -> array
318
+ #
319
+ # Internal method that returns the address information as an array.
320
+ # Used internally by socket operations.
321
+ #
322
+ def _to_array
323
+ case @family
324
+ when Socket::AF_INET
325
+ s = "AF_INET"
326
+ when Socket::AF_INET6
327
+ s = "AF_INET6"
328
+ when Socket::AF_UNIX
329
+ s = "AF_UNIX"
330
+ else
331
+ s = "(unknown AF)"
332
+ end
333
+ addr, port = self.getnameinfo(Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
334
+ [ s, port.to_i, addr, addr ]
335
+ end
336
+
337
+ #
338
+ # call-seq:
339
+ # addrinfo.to_sockaddr -> string
340
+ #
341
+ # Returns the socket address as a packed string.
342
+ #
343
+ # ai = Addrinfo.tcp("localhost", 80)
344
+ # ai.to_sockaddr #=> packed sockaddr string
345
+ #
346
+ def to_sockaddr
347
+ @sockaddr
348
+ end
349
+
350
+ alias to_s to_sockaddr
351
+
352
+ #
353
+ # call-seq:
354
+ # addrinfo.unix? -> true or false
355
+ #
356
+ # Returns true if the address is a Unix domain socket address.
357
+ #
358
+ # Addrinfo.unix("/tmp/sock").unix? #=> true
359
+ # Addrinfo.tcp("localhost", 80).unix? #=> false
360
+ #
361
+ def unix?
362
+ @family == Socket::AF_UNIX
363
+ end
364
+ end
365
+
366
+ class BasicSocket < IO
367
+ @@do_not_reverse_lookup = true
368
+
369
+ #
370
+ # call-seq:
371
+ # BasicSocket.do_not_reverse_lookup -> true or false
372
+ #
373
+ # Returns the current setting for reverse DNS lookups.
374
+ #
375
+ # BasicSocket.do_not_reverse_lookup #=> false
376
+ #
377
+ def self.do_not_reverse_lookup
378
+ @@do_not_reverse_lookup
379
+ end
380
+
381
+ #
382
+ # call-seq:
383
+ # BasicSocket.do_not_reverse_lookup = boolean -> boolean
384
+ #
385
+ # Sets whether to perform reverse DNS lookups.
386
+ #
387
+ # BasicSocket.do_not_reverse_lookup = true
388
+ #
389
+ def self.do_not_reverse_lookup=(val)
390
+ @@do_not_reverse_lookup = val ? true : false
391
+ end
392
+
393
+ #
394
+ # call-seq:
395
+ # BasicSocket.new(*args) -> basicsocket
396
+ #
397
+ # Creates a new BasicSocket object. This is typically called by subclasses.
398
+ #
399
+ def initialize(*args)
400
+ super(*args)
401
+ self._is_socket = true
402
+ @do_not_reverse_lookup = @@do_not_reverse_lookup
403
+ end
404
+
405
+ #
406
+ # call-seq:
407
+ # BasicSocket.for_fd(fd) -> basicsocket
408
+ #
409
+ # Creates a BasicSocket object from an existing file descriptor.
410
+ #
411
+ # sock = BasicSocket.for_fd(3)
412
+ #
413
+ def self.for_fd(fd)
414
+ super(fd, "r+")
415
+ end
416
+
417
+ #def connect_address
418
+
419
+ #
420
+ # call-seq:
421
+ # basicsocket.local_address -> addrinfo
422
+ #
423
+ # Returns an Addrinfo object for the local address of the socket.
424
+ #
425
+ # sock.local_address #=> #<Addrinfo: 127.0.0.1:12345 TCP>
426
+ #
427
+ def local_address
428
+ Addrinfo.new self.getsockname
429
+ end
430
+
431
+ #
432
+ # call-seq:
433
+ # basicsocket.recv_nonblock(maxlen, flags=0) -> string
434
+ #
435
+ # Receives data from the socket without blocking. May raise an exception
436
+ # if no data is available.
437
+ #
438
+ # data = sock.recv_nonblock(1024)
439
+ #
440
+ def recv_nonblock(maxlen, flags=0)
441
+ begin
442
+ _setnonblock(true)
443
+ recv(maxlen, flags)
444
+ ensure
445
+ _setnonblock(false)
446
+ end
447
+ end
448
+
449
+ #
450
+ # call-seq:
451
+ # basicsocket.remote_address -> addrinfo
452
+ #
453
+ # Returns an Addrinfo object for the remote address of the socket.
454
+ #
455
+ # sock.remote_address #=> #<Addrinfo: 192.168.1.1:80 TCP>
456
+ #
457
+ def remote_address
458
+ Addrinfo.new self.getpeername
459
+ end
460
+
461
+ attr_accessor :do_not_reverse_lookup
462
+ end
463
+
464
+ class IPSocket < BasicSocket
465
+ #
466
+ # call-seq:
467
+ # IPSocket.getaddress(host) -> string
468
+ #
469
+ # Returns the IP address of the given hostname as a string.
470
+ #
471
+ # IPSocket.getaddress("localhost") #=> "127.0.0.1"
472
+ # IPSocket.getaddress("www.ruby-lang.org") #=> "150.95.145.38"
473
+ #
474
+ def self.getaddress(host)
475
+ Addrinfo.ip(host).ip_address
476
+ end
477
+
478
+ #
479
+ # call-seq:
480
+ # ipsocket.addr -> [family, port, hostname, ip_address]
481
+ #
482
+ # Returns the local address information as an array.
483
+ #
484
+ # sock.addr #=> ["AF_INET", 12345, "localhost", "127.0.0.1"]
485
+ #
486
+ def addr
487
+ Addrinfo.new(self.getsockname)._to_array
488
+ end
489
+
490
+ #
491
+ # call-seq:
492
+ # ipsocket.peeraddr -> [family, port, hostname, ip_address]
493
+ #
494
+ # Returns the remote address information as an array.
495
+ #
496
+ # sock.peeraddr #=> ["AF_INET", 80, "example.com", "93.184.216.34"]
497
+ #
498
+ def peeraddr
499
+ Addrinfo.new(self.getpeername)._to_array
500
+ end
501
+
502
+ #
503
+ # call-seq:
504
+ # ipsocket.recvfrom(maxlen, flags=0) -> [data, addrinfo]
505
+ #
506
+ # Receives data and sender information from the IP socket.
507
+ #
508
+ # data, addr = sock.recvfrom(1024)
509
+ # data, addr = sock.recvfrom(512, 0)
510
+ #
511
+ def recvfrom(maxlen, flags=0)
512
+ msg, sa = _recvfrom(maxlen, flags)
513
+ [ msg, Addrinfo.new(sa)._to_array ]
514
+ end
515
+ end
516
+
517
+ class TCPSocket < IPSocket
518
+ #
519
+ # call-seq:
520
+ # TCPSocket.new(host, service, local_host=nil, local_service=nil) -> tcpsocket
521
+ #
522
+ # Creates a new TCP socket connected to the given host and service.
523
+ # Optionally binds to local_host and local_service first.
524
+ #
525
+ # sock = TCPSocket.new("localhost", 80)
526
+ # sock = TCPSocket.new("www.example.com", "http")
527
+ # sock = TCPSocket.new("remote", 80, "127.0.0.1", 12345)
528
+ #
529
+ def initialize(host, service, local_host=nil, local_service=nil)
530
+ if @init_with_fd
531
+ super(host, service)
532
+ else
533
+ s = nil
534
+ e = SocketError
535
+ Addrinfo.foreach(host, service) {|ai|
536
+ begin
537
+ s = Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0)
538
+ if local_host or local_service
539
+ local_host ||= (ai.afamily == Socket::AF_INET) ? "0.0.0.0" : "::"
540
+ local_service ||= "0"
541
+ bi = Addrinfo.getaddrinfo(local_host, local_service, ai.afamily, ai.socktype)[0]
542
+ Socket._bind(s, bi.to_sockaddr)
543
+ end
544
+ Socket._connect(s, ai.to_sockaddr)
545
+ super(s, "r+")
546
+ return
547
+ rescue => e0
548
+ e = e0
549
+ end
550
+ }
551
+ raise e
552
+ end
553
+ end
554
+ #def self.gethostbyname(host)
555
+ end
556
+
557
+ class TCPServer < TCPSocket
558
+ #
559
+ # call-seq:
560
+ # TCPServer.new(host=nil, service) -> tcpserver
561
+ #
562
+ # Creates a new TCP server socket bound to the given host and service.
563
+ # If host is nil, binds to all available interfaces.
564
+ #
565
+ # server = TCPServer.new("localhost", 8080)
566
+ # server = TCPServer.new(nil, 3000) # binds to all interfaces
567
+ # server = TCPServer.new("0.0.0.0", "http")
568
+ #
569
+ def initialize(host=nil, service)
570
+ ai = Addrinfo.getaddrinfo(host, service, nil, nil, nil, Socket::AI_PASSIVE)[0]
571
+ @init_with_fd = true
572
+ super(Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0), "r+")
573
+ if Socket.const_defined?(:SO_REUSEADDR)
574
+ self.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
575
+ end
576
+ Socket._bind(self.fileno, ai.to_sockaddr)
577
+ listen(5)
578
+ self
579
+ end
580
+
581
+ #
582
+ # call-seq:
583
+ # tcpserver.accept -> tcpsocket
584
+ #
585
+ # Accepts an incoming connection and returns a new TCPSocket.
586
+ #
587
+ # server = TCPServer.new(8080)
588
+ # client = server.accept
589
+ #
590
+ def accept
591
+ fd = self.sysaccept
592
+ begin
593
+ s = TCPSocket._allocate
594
+ s.instance_eval{
595
+ @init_with_fd = true
596
+ }
597
+ s.__send__(:initialize, fd, "r+")
598
+ s
599
+ rescue => e
600
+ IO._sysclose(fd) rescue nil
601
+ raise e
602
+ end
603
+ end
604
+
605
+ #
606
+ # call-seq:
607
+ # tcpserver.accept_nonblock -> unixsocket
608
+ #
609
+ # Accepts an incoming connection without blocking. May raise an exception
610
+ # if no connection is available.
611
+ #
612
+ # client = server.accept_nonblock
613
+ #
614
+ def accept_nonblock
615
+ begin
616
+ self._setnonblock(true)
617
+ self.accept
618
+ ensure
619
+ self._setnonblock(false)
620
+ end
621
+ end
622
+
623
+ #
624
+ # call-seq:
625
+ # unixserver.listen(backlog) -> 0
626
+ #
627
+ # Sets the socket to listen for incoming connections with the given backlog.
628
+ #
629
+ # server.listen(5)
630
+ # server.listen(128)
631
+ #
632
+ def listen(backlog)
633
+ Socket._listen(self.fileno, backlog)
634
+ 0
635
+ end
636
+
637
+ #
638
+ # call-seq:
639
+ # tcpserver.sysaccept -> integer
640
+ #
641
+ # Accepts an incoming connection and returns the file descriptor.
642
+ #
643
+ # fd = server.sysaccept
644
+ #
645
+ def sysaccept
646
+ Socket._accept(self.fileno)
647
+ end
648
+ end
649
+
650
+ class UDPSocket < IPSocket
651
+ #
652
+ # call-seq:
653
+ # UDPSocket.new(af=Socket::AF_INET) -> udpsocket
654
+ #
655
+ # Creates a new UDP socket for the given address family.
656
+ #
657
+ # sock = UDPSocket.new
658
+ # sock = UDPSocket.new(Socket::AF_INET6)
659
+ #
660
+ def initialize(af=Socket::AF_INET)
661
+ super(Socket._socket(af, Socket::SOCK_DGRAM, 0), "r+")
662
+ @af = af
663
+ self
664
+ end
665
+
666
+ #
667
+ # call-seq:
668
+ # ipsocket.bind(host, port) -> 0
669
+ #
670
+ # Binds the socket to the given host and port.
671
+ #
672
+ # sock.bind("127.0.0.1", 8080)
673
+ # sock.bind("0.0.0.0", 3000)
674
+ #
675
+ def bind(host, port)
676
+ Socket._bind(self.fileno, _sockaddr_in(port, host))
677
+ 0
678
+ end
679
+
680
+ #
681
+ # call-seq:
682
+ # ipsocket.connect(host, port) -> 0
683
+ #
684
+ # Connects the socket to the given host and port.
685
+ #
686
+ # sock.connect("127.0.0.1", 80)
687
+ # sock.connect("www.example.com", 443)
688
+ #
689
+ def connect(host, port)
690
+ Socket._connect(self.fileno, _sockaddr_in(port, host))
691
+ 0
692
+ end
693
+
694
+ #
695
+ # call-seq:
696
+ # udpsocket.recvfrom_nonblock(maxlen, flags=0) -> [data, addrinfo]
697
+ #
698
+ # Receives data and sender information without blocking.
699
+ # May raise an exception if no data is available.
700
+ #
701
+ # data, addr = sock.recvfrom_nonblock(1024)
702
+ #
703
+ def recvfrom_nonblock(*args)
704
+ s = self
705
+ begin
706
+ self._setnonblock(true)
707
+ self.recvfrom(*args)
708
+ ensure
709
+ # XXX: self is a SystemcallException here! (should be bug)
710
+ s._setnonblock(false)
711
+ end
712
+ end
713
+
714
+ #
715
+ # call-seq:
716
+ # ipsocket.send(mesg, flags, host=nil, port=nil) -> integer
717
+ #
718
+ # Sends data through the socket. Returns the number of bytes sent.
719
+ #
720
+ # sock.send("Hello", 0)
721
+ # sock.send("Data", 0, "127.0.0.1", 8080)
722
+ #
723
+ def send(mesg, flags, host=nil, port=nil)
724
+ if port
725
+ super(mesg, flags, _sockaddr_in(port, host))
726
+ elsif host
727
+ super(mesg, flags, host)
728
+ else
729
+ super(mesg, flags)
730
+ end
731
+ end
732
+
733
+ #
734
+ # call-seq:
735
+ # udpsocket._sockaddr_in(port, host) -> string
736
+ #
737
+ # Internal method to create a sockaddr_in structure for the given port and host.
738
+ # Uses the socket's address family.
739
+ #
740
+ def _sockaddr_in(port, host)
741
+ ai = Addrinfo.getaddrinfo(host, port, @af, Socket::SOCK_DGRAM)[0]
742
+ ai.to_sockaddr
743
+ end
744
+ end
745
+
746
+ class Socket < BasicSocket
747
+ #
748
+ # call-seq:
749
+ # Socket.new(domain, type, protocol=0) -> socket
750
+ #
751
+ # Creates a new socket with the given domain, type, and protocol.
752
+ #
753
+ # sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
754
+ # sock = Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM)
755
+ #
756
+ def initialize(domain, type, protocol=0)
757
+ super(Socket._socket(domain, type, protocol), "r+")
758
+ end
759
+
760
+ #def self.accept_loop
761
+
762
+ #
763
+ # call-seq:
764
+ # Socket.getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=0) -> array
765
+ #
766
+ # Returns an array of Addrinfo objects for the given nodename and servname.
767
+ #
768
+ # Addrinfo.getaddrinfo("localhost", "http")
769
+ # Addrinfo.getaddrinfo("www.example.com", 80, Socket::AF_INET)
770
+ #
771
+ def self.getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=0)
772
+ Addrinfo.getaddrinfo(nodename, servname, family, socktype, protocol, flags).map {|ai|
773
+ ary = ai._to_array
774
+ ary[2] = nodename
775
+ ary[4] = ai.afamily
776
+ ary[5] = ai.socktype
777
+ ary[6] = ai.protocol
778
+ ary
779
+ }
780
+ end
781
+
782
+ #def self.getnameinfo
783
+ #def self.ip_address_list
784
+
785
+ #
786
+ # call-seq:
787
+ # Socket.open(domain, type, protocol=0) -> socket
788
+ #
789
+ # Creates a new socket. Alias for Socket.new.
790
+ #
791
+ # sock = Socket.open(Socket::AF_INET, Socket::SOCK_STREAM)
792
+ #
793
+ def self.open(*args)
794
+ new(args)
795
+ end
796
+
797
+ #
798
+ # call-seq:
799
+ # Socket.sockaddr_in(port, host) -> string
800
+ #
801
+ # Returns a packed sockaddr_in structure for the given port and host.
802
+ #
803
+ # Socket.sockaddr_in(80, "127.0.0.1")
804
+ # Socket.sockaddr_in(443, "localhost")
805
+ #
806
+ def self.sockaddr_in(port, host)
807
+ ai = Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_DGRAM)[0]
808
+ ai.to_sockaddr
809
+ end
810
+
811
+ #def self.tcp
812
+ #def self.tcp_server_loop
813
+ #def self.tcp_server_sockets
814
+ #def self.udp_server_loop
815
+ #def self.udp_server_loop_on
816
+ #def self.udp_server_recv
817
+ #def self.udp_server_sockets
818
+ #def self.unix(path)
819
+ #def self.unix_server_loop
820
+ #def self.unix_server_socket
821
+
822
+ #
823
+ # call-seq:
824
+ # Socket.unpack_sockaddr_in(sockaddr) -> [port, ip_address]
825
+ #
826
+ # Unpacks a packed sockaddr_in structure and returns port and IP address.
827
+ #
828
+ # port, addr = Socket.unpack_sockaddr_in(sockaddr)
829
+ #
830
+ def self.unpack_sockaddr_in(sa)
831
+ Addrinfo.new(sa).ip_unpack.reverse
832
+ end
833
+
834
+ #
835
+ # call-seq:
836
+ # Socket.unpack_sockaddr_un(sockaddr) -> path
837
+ #
838
+ # Unpacks a packed sockaddr_un structure and returns the Unix socket path.
839
+ #
840
+ # path = Socket.unpack_sockaddr_un(sockaddr)
841
+ #
842
+ def self.unpack_sockaddr_un(sa)
843
+ Addrinfo.new(sa).unix_path
844
+ end
845
+
846
+ class << self
847
+ alias pack_sockaddr_in sockaddr_in
848
+ alias pack_sockaddr_un sockaddr_un
849
+ alias pair socketpair
850
+ end
851
+
852
+ def accept
853
+ fd, addr = self.sysaccept
854
+ [ Socket.for_fd(fd), addr ]
855
+ end
856
+
857
+ def accept_nonblock
858
+ begin
859
+ self._setnonblock(true)
860
+ self.accept
861
+ ensure
862
+ self._setnonblock(false)
863
+ end
864
+ end
865
+
866
+ #
867
+ # call-seq:
868
+ # socket.bind(sockaddr) -> 0
869
+ #
870
+ # Binds the socket to the given socket address.
871
+ #
872
+ # sock.bind(Socket.sockaddr_in(8080, "127.0.0.1"))
873
+ # sock.bind(addrinfo)
874
+ #
875
+ def bind(sockaddr)
876
+ sockaddr = sockaddr.to_sockaddr if sockaddr.is_a? Addrinfo
877
+ Socket._bind(self.fileno, sockaddr)
878
+ 0
879
+ end
880
+
881
+ #
882
+ # call-seq:
883
+ # socket.connect(sockaddr) -> 0
884
+ #
885
+ # Connects the socket to the given socket address.
886
+ #
887
+ # sock.connect(Socket.sockaddr_in(80, "127.0.0.1"))
888
+ # sock.connect(addrinfo)
889
+ #
890
+ def connect(sockaddr)
891
+ sockaddr = sockaddr.to_sockaddr if sockaddr.is_a? Addrinfo
892
+ Socket._connect(self.fileno, sockaddr)
893
+ 0
894
+ end
895
+
896
+ #
897
+ # call-seq:
898
+ # socket.connect_nonblock(sockaddr) -> 0
899
+ #
900
+ # Connects the socket to the given address without blocking.
901
+ # May raise an exception if the connection cannot be completed immediately.
902
+ #
903
+ # sock.connect_nonblock(sockaddr)
904
+ #
905
+ def connect_nonblock(sockaddr)
906
+ begin
907
+ self._setnonblock(true)
908
+ self.connect(sockaddr)
909
+ ensure
910
+ self._setnonblock(false)
911
+ end
912
+ end
913
+
914
+ #def ipv6only!
915
+
916
+ def listen(backlog)
917
+ Socket._listen(self.fileno, backlog)
918
+ 0
919
+ end
920
+
921
+ def recvfrom(maxlen, flags=0)
922
+ msg, sa = _recvfrom(maxlen, flags)
923
+ socktype = self.getsockopt(Socket::SOL_SOCKET, Socket::SO_TYPE).int
924
+ [ msg, Addrinfo.new(sa, Socket::PF_UNSPEC, socktype) ]
925
+ end
926
+
927
+ def recvfrom_nonblock(*args)
928
+ begin
929
+ self._setnonblock(true)
930
+ self._recvfrom(*args)
931
+ ensure
932
+ self._setnonblock(false)
933
+ end
934
+ end
935
+
936
+ def sysaccept
937
+ Socket._accept2(self.fileno)
938
+ end
939
+ end
940
+
941
+ class UNIXSocket < BasicSocket
942
+ #
943
+ # call-seq:
944
+ # UNIXSocket.new(path) -> unixsocket
945
+ # UNIXSocket.new(path) { |sock| block } -> obj
946
+ #
947
+ # Creates a new Unix domain socket connected to the given path.
948
+ # If a block is given, yields the socket and closes it when done.
949
+ #
950
+ # sock = UNIXSocket.new("/tmp/socket")
951
+ # UNIXSocket.new("/tmp/socket") { |s| s.write("data") }
952
+ #
953
+ def initialize(path, &block)
954
+ if self.is_a? UNIXServer
955
+ super(path, "r")
956
+ else
957
+ super(Socket._socket(Socket::AF_UNIX, Socket::SOCK_STREAM, 0), "r+")
958
+ Socket._connect(self.fileno, Socket.sockaddr_un(path))
959
+
960
+ if block_given?
961
+ begin
962
+ yield self
963
+ ensure
964
+ begin
965
+ self.close unless self.closed?
966
+ rescue StandardError
967
+ end
968
+ end
969
+ end
970
+ end
971
+ end
972
+
973
+ class << self
974
+ #
975
+ # call-seq:
976
+ # UNIXSocket.socketpair(type=Socket::SOCK_STREAM, protocol=0) -> [socket1, socket2]
977
+ #
978
+ # Creates a pair of connected Unix domain sockets.
979
+ #
980
+ # sock1, sock2 = UNIXSocket.socketpair
981
+ # sock1, sock2 = UNIXSocket.socketpair(Socket::SOCK_DGRAM)
982
+ #
983
+ def socketpair(type=Socket::SOCK_STREAM, protocol=0)
984
+ a = Socket.socketpair(Socket::AF_UNIX, type, protocol)
985
+ [ UNIXSocket.for_fd(a[0]), UNIXSocket.for_fd(a[1]) ]
986
+ end
987
+
988
+ alias pair socketpair
989
+ end
990
+
991
+ #
992
+ # call-seq:
993
+ # unixsocket.addr -> [family, path]
994
+ #
995
+ # Returns the local address information as an array.
996
+ #
997
+ # sock.addr #=> ["AF_UNIX", "/tmp/socket"]
998
+ #
999
+ def addr
1000
+ [ "AF_UNIX", path ]
1001
+ end
1002
+
1003
+ #
1004
+ # call-seq:
1005
+ # unixsocket.path -> string
1006
+ #
1007
+ # Returns the path of the Unix domain socket.
1008
+ #
1009
+ # sock.path #=> "/tmp/socket"
1010
+ #
1011
+ def path
1012
+ Addrinfo.new(self.getsockname).unix_path
1013
+ end
1014
+
1015
+ #
1016
+ # call-seq:
1017
+ # unixsocket.peeraddr -> [family, path]
1018
+ #
1019
+ # Returns the remote address information as an array.
1020
+ #
1021
+ # sock.peeraddr #=> ["AF_UNIX", "/tmp/peer_socket"]
1022
+ #
1023
+ def peeraddr
1024
+ [ "AF_UNIX", Addrinfo.new(self.getpeername).unix_path ]
1025
+ end
1026
+
1027
+ #def recv_io
1028
+
1029
+ def recvfrom(maxlen, flags=0)
1030
+ msg, sa = _recvfrom(maxlen, flags)
1031
+ path = (sa.size > 0) ? Addrinfo.new(sa).unix_path : ""
1032
+ [ msg, [ "AF_UNIX", path ] ]
1033
+ end
1034
+
1035
+ #def send_io
1036
+ end
1037
+
1038
+ class UNIXServer < UNIXSocket
1039
+ #
1040
+ # call-seq:
1041
+ # UNIXServer.new(path) -> unixserver
1042
+ #
1043
+ # Creates a new Unix domain server socket bound to the given path.
1044
+ #
1045
+ # server = UNIXServer.new("/tmp/server_socket")
1046
+ #
1047
+ def initialize(path)
1048
+ fd = Socket._socket(Socket::AF_UNIX, Socket::SOCK_STREAM, 0)
1049
+ begin
1050
+ super(fd)
1051
+ Socket._bind(fd, Socket.pack_sockaddr_un(path))
1052
+ self.listen(5)
1053
+ rescue => e
1054
+ IO._sysclose(fd) rescue nil
1055
+ raise e
1056
+ end
1057
+
1058
+ if block_given?
1059
+ begin
1060
+ yield self
1061
+ ensure
1062
+ self.close rescue nil unless self.closed?
1063
+ end
1064
+ end
1065
+ end
1066
+
1067
+ #
1068
+ # call-seq:
1069
+ # unixserver.accept -> unixsocket
1070
+ #
1071
+ # Accepts an incoming connection and returns a new UNIXSocket.
1072
+ #
1073
+ # server = UNIXServer.new("/tmp/server")
1074
+ # client = server.accept
1075
+ #
1076
+ def accept
1077
+ fd = self.sysaccept
1078
+ begin
1079
+ sock = UNIXSocket.for_fd(fd)
1080
+ rescue
1081
+ IO._sysclose(fd) rescue nil
1082
+ end
1083
+ sock
1084
+ end
1085
+
1086
+ #
1087
+ # call-seq:
1088
+ # unixserver.accept_nonblock -> unixsocket
1089
+ #
1090
+ # Accepts an incoming connection without blocking. May raise an exception
1091
+ # if no connection is available.
1092
+ #
1093
+ # client = server.accept_nonblock
1094
+ #
1095
+ def accept_nonblock
1096
+ begin
1097
+ self._setnonblock(true)
1098
+ self.accept
1099
+ ensure
1100
+ self._setnonblock(false)
1101
+ end
1102
+ end
1103
+
1104
+ #
1105
+ # call-seq:
1106
+ # unixserver.listen(backlog) -> 0
1107
+ #
1108
+ # Sets the socket to listen for incoming connections with the given backlog.
1109
+ #
1110
+ # server.listen(5)
1111
+ # server.listen(128)
1112
+ #
1113
+ def listen(backlog)
1114
+ Socket._listen(self.fileno, backlog)
1115
+ 0
1116
+ end
1117
+
1118
+ #
1119
+ # call-seq:
1120
+ # unixserver.sysaccept -> integer
1121
+ #
1122
+ # Accepts an incoming connection and returns the file descriptor.
1123
+ #
1124
+ # fd = server.sysaccept
1125
+ #
1126
+ def sysaccept
1127
+ Socket._accept(self.fileno)
1128
+ end
1129
+ end
1130
+
1131
+ class SocketError < StandardError; end