esruby 0.0.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 (763) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +22 -0
  4. data/bin/esruby +34 -0
  5. data/lib/esruby.rb +26 -0
  6. data/lib/esruby/build.rb +140 -0
  7. data/lib/esruby/build/configuration.rb +77 -0
  8. data/lib/esruby/gem.rb +5 -0
  9. data/lib/esruby/gem/specification.rb +35 -0
  10. data/resources/build_config.eruby +53 -0
  11. data/resources/cpp/esruby.cpp +64 -0
  12. data/resources/cpp/esruby.hpp +42 -0
  13. data/resources/cpp/main.cpp +9 -0
  14. data/resources/js/esruby.js +45 -0
  15. data/resources/mruby/AUTHORS +40 -0
  16. data/resources/mruby/CONTRIBUTING.md +68 -0
  17. data/resources/mruby/LEGAL +6 -0
  18. data/resources/mruby/MITL +20 -0
  19. data/resources/mruby/Makefile +17 -0
  20. data/resources/mruby/NEWS +13 -0
  21. data/resources/mruby/README.md +92 -0
  22. data/resources/mruby/Rakefile +152 -0
  23. data/resources/mruby/TODO +10 -0
  24. data/resources/mruby/appveyor.yml +38 -0
  25. data/resources/mruby/appveyor_config.rb +50 -0
  26. data/resources/mruby/benchmark/bm_ao_render.rb +314 -0
  27. data/resources/mruby/benchmark/bm_app_lc_fizzbuzz.rb +52 -0
  28. data/resources/mruby/benchmark/bm_fib.rb +7 -0
  29. data/resources/mruby/benchmark/bm_so_lists.rb +47 -0
  30. data/resources/mruby/benchmark/build_config_boxing.rb +28 -0
  31. data/resources/mruby/benchmark/build_config_cc.rb +13 -0
  32. data/resources/mruby/benchmark/plot.gpl +5 -0
  33. data/resources/mruby/bin/mirb +0 -0
  34. data/resources/mruby/bin/mrbc +0 -0
  35. data/resources/mruby/bin/mruby +0 -0
  36. data/resources/mruby/bin/mruby-strip +0 -0
  37. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/README.md +82 -0
  38. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/mrbgem.rake +63 -0
  39. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/mrblib/regexp_pcre.rb +232 -0
  40. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/mrblib/string_pcre.rb +333 -0
  41. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/132html +313 -0
  42. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/AUTHORS +45 -0
  43. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/CMakeLists.txt +959 -0
  44. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/COPYING +5 -0
  45. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/ChangeLog +4981 -0
  46. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/CheckMan +67 -0
  47. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/CleanTxt +113 -0
  48. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/Detrail +35 -0
  49. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/HACKING +473 -0
  50. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/INSTALL +370 -0
  51. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/LICENCE +92 -0
  52. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/Makefile.am +877 -0
  53. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/Makefile.in +2917 -0
  54. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/NEWS +611 -0
  55. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/NON-AUTOTOOLS-BUILD +639 -0
  56. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/NON-UNIX-USE +7 -0
  57. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/PrepareRelease +253 -0
  58. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/README +935 -0
  59. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/RunGrepTest +551 -0
  60. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/RunTest +1015 -0
  61. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/RunTest.bat +616 -0
  62. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/aclocal.m4 +1230 -0
  63. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/output.0 +21280 -0
  64. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/output.1 +21280 -0
  65. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/requests +273 -0
  66. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/traces.0 +2421 -0
  67. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/autom4te.cache/traces.1 +1144 -0
  68. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  69. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/FindEditline.cmake +17 -0
  70. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  71. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/cmake/FindReadline.cmake +29 -0
  72. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/compile +343 -0
  73. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config-cmake.h.in +54 -0
  74. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.guess +1552 -0
  75. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.h +392 -0
  76. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.h.generic +392 -0
  77. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.h.in +343 -0
  78. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/config.sub +1804 -0
  79. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/configure +21280 -0
  80. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/configure.ac +1082 -0
  81. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/depcomp +708 -0
  82. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/dftables.c +212 -0
  83. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/index.html +180 -0
  84. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre-config.html +109 -0
  85. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre.html +204 -0
  86. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre16.html +383 -0
  87. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_assign_jit_stack.html +76 -0
  88. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_compile.html +108 -0
  89. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_compile2.html +112 -0
  90. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_config.html +91 -0
  91. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_copy_named_substring.html +65 -0
  92. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_copy_substring.html +61 -0
  93. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_dfa_exec.html +128 -0
  94. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_exec.html +110 -0
  95. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_free_study.html +46 -0
  96. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_free_substring.html +46 -0
  97. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_free_substring_list.html +46 -0
  98. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_fullinfo.html +108 -0
  99. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_named_substring.html +68 -0
  100. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_stringnumber.html +57 -0
  101. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_stringtable_entries.html +60 -0
  102. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_substring.html +64 -0
  103. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_get_substring_list.html +61 -0
  104. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_jit_exec.html +108 -0
  105. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_jit_stack_alloc.html +55 -0
  106. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_jit_stack_free.html +48 -0
  107. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_maketables.html +48 -0
  108. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_pattern_to_host_byte_order.html +58 -0
  109. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_refcount.html +51 -0
  110. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_study.html +68 -0
  111. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_utf16_to_host_byte_order.html +57 -0
  112. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcre_version.html +46 -0
  113. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreapi.html +2786 -0
  114. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrebuild.html +517 -0
  115. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrecallout.html +243 -0
  116. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrecompat.html +216 -0
  117. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrecpp.html +368 -0
  118. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcredemo.html +426 -0
  119. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcregrep.html +757 -0
  120. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrejit.html +458 -0
  121. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrelimits.html +86 -0
  122. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrematching.html +233 -0
  123. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrepartial.html +474 -0
  124. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrepattern.html +2953 -0
  125. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreperform.html +195 -0
  126. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreposix.html +292 -0
  127. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreprecompile.html +158 -0
  128. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcresample.html +110 -0
  129. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcrestack.html +225 -0
  130. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcresyntax.html +521 -0
  131. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcretest.html +1082 -0
  132. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/html/pcreunicode.html +270 -0
  133. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/index.html.src +180 -0
  134. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre-config.1 +92 -0
  135. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre-config.txt +86 -0
  136. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre.3 +202 -0
  137. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre.txt +9909 -0
  138. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre16.3 +390 -0
  139. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre32.3 +389 -0
  140. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_assign_jit_stack.3 +61 -0
  141. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_compile.3 +98 -0
  142. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_compile2.3 +106 -0
  143. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_config.3 +76 -0
  144. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_copy_named_substring.3 +59 -0
  145. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_copy_substring.3 +52 -0
  146. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_dfa_exec.3 +125 -0
  147. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_exec.3 +103 -0
  148. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_free_study.3 +31 -0
  149. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_free_substring.3 +31 -0
  150. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_free_substring_list.3 +31 -0
  151. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_fullinfo.3 +95 -0
  152. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_named_substring.3 +62 -0
  153. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_stringnumber.3 +45 -0
  154. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_stringtable_entries.3 +48 -0
  155. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_substring.3 +55 -0
  156. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_get_substring_list.3 +49 -0
  157. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_jit_exec.3 +104 -0
  158. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_jit_stack_alloc.3 +45 -0
  159. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_jit_stack_free.3 +35 -0
  160. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_maketables.3 +33 -0
  161. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_pattern_to_host_byte_order.3 +46 -0
  162. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_refcount.3 +36 -0
  163. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_study.3 +56 -0
  164. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_utf16_to_host_byte_order.3 +46 -0
  165. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_utf32_to_host_byte_order.3 +46 -0
  166. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcre_version.3 +31 -0
  167. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreapi.3 +2823 -0
  168. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrebuild.3 +520 -0
  169. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrecallout.3 +214 -0
  170. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrecompat.3 +185 -0
  171. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrecpp.3 +348 -0
  172. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcregrep.1 +679 -0
  173. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcregrep.txt +740 -0
  174. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrejit.3 +437 -0
  175. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrelimits.3 +67 -0
  176. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrematching.3 +206 -0
  177. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrepartial.3 +445 -0
  178. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrepattern.3 +2983 -0
  179. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreperform.3 +177 -0
  180. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreposix.3 +270 -0
  181. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreprecompile.3 +151 -0
  182. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcresample.3 +99 -0
  183. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcrestack.3 +215 -0
  184. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcresyntax.3 +496 -0
  185. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcretest.1 +1079 -0
  186. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcretest.txt +1012 -0
  187. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/pcreunicode.3 +255 -0
  188. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/doc/perltest.txt +42 -0
  189. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/install-sh +527 -0
  190. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcre.pc.in +12 -0
  191. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcre16.pc.in +12 -0
  192. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcre32.pc.in +12 -0
  193. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcrecpp.pc.in +12 -0
  194. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/libpcreposix.pc.in +13 -0
  195. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/ltmain.sh +9636 -0
  196. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ax_pthread.m4 +309 -0
  197. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/libtool.m4 +7844 -0
  198. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ltoptions.m4 +369 -0
  199. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ltsugar.m4 +123 -0
  200. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/ltversion.m4 +23 -0
  201. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/lt~obsolete.m4 +98 -0
  202. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/m4/pcre_visibility.m4 +89 -0
  203. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/makevp.bat +66 -0
  204. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/makevp_c.txt +20 -0
  205. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/makevp_l.txt +20 -0
  206. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/missing +331 -0
  207. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre-config.in +133 -0
  208. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre.h +653 -0
  209. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre.h.generic +653 -0
  210. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre.h.in +653 -0
  211. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_byte_order.c +45 -0
  212. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_chartables.c +45 -0
  213. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_compile.c +45 -0
  214. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_config.c +45 -0
  215. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_dfa_exec.c +45 -0
  216. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_exec.c +45 -0
  217. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_fullinfo.c +45 -0
  218. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_get.c +45 -0
  219. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_globals.c +45 -0
  220. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_jit_compile.c +45 -0
  221. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_maketables.c +45 -0
  222. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_newline.c +45 -0
  223. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_ord2utf16.c +90 -0
  224. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_printint.c +45 -0
  225. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_refcount.c +45 -0
  226. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_string_utils.c +45 -0
  227. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_study.c +45 -0
  228. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_tables.c +45 -0
  229. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_ucd.c +45 -0
  230. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_utf16_utils.c +130 -0
  231. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_valid_utf16.c +156 -0
  232. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_version.c +45 -0
  233. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre16_xclass.c +45 -0
  234. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_byte_order.c +45 -0
  235. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_chartables.c +45 -0
  236. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_compile.c +45 -0
  237. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_config.c +45 -0
  238. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_dfa_exec.c +45 -0
  239. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_exec.c +45 -0
  240. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_fullinfo.c +45 -0
  241. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_get.c +45 -0
  242. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_globals.c +45 -0
  243. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_jit_compile.c +45 -0
  244. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_maketables.c +45 -0
  245. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_newline.c +45 -0
  246. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_ord2utf32.c +82 -0
  247. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_printint.c +45 -0
  248. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_refcount.c +45 -0
  249. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_string_utils.c +45 -0
  250. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_study.c +45 -0
  251. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_tables.c +45 -0
  252. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_ucd.c +45 -0
  253. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_utf32_utils.c +141 -0
  254. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_valid_utf32.c +131 -0
  255. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_version.c +45 -0
  256. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre32_xclass.c +45 -0
  257. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_byte_order.c +318 -0
  258. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_chartables.c +198 -0
  259. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_chartables.c.dist +198 -0
  260. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_compile.c +8386 -0
  261. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_config.c +186 -0
  262. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_dfa_exec.c +3582 -0
  263. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_exec.c +7049 -0
  264. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_fullinfo.c +231 -0
  265. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_get.c +662 -0
  266. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_globals.c +84 -0
  267. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_internal.h +2744 -0
  268. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_jit_compile.c +8560 -0
  269. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_jit_test.c +1614 -0
  270. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_maketables.c +151 -0
  271. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_newline.c +210 -0
  272. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_ord2utf8.c +94 -0
  273. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_printint.c +766 -0
  274. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_refcount.c +92 -0
  275. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_scanner.cc +199 -0
  276. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_scanner.h +172 -0
  277. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_scanner_unittest.cc +159 -0
  278. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_string_utils.c +211 -0
  279. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_stringpiece.cc +43 -0
  280. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_stringpiece.h.in +179 -0
  281. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_stringpiece_unittest.cc +150 -0
  282. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_study.c +1562 -0
  283. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_tables.c +655 -0
  284. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_ucd.c +3298 -0
  285. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_valid_utf8.c +312 -0
  286. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_version.c +98 -0
  287. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcre_xclass.c +198 -0
  288. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp.cc +922 -0
  289. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp.h +710 -0
  290. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp_internal.h +71 -0
  291. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpp_unittest.cc +1291 -0
  292. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcrecpparg.h.in +174 -0
  293. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcredemo.c +406 -0
  294. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcregexp.pas +845 -0
  295. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcregrep.c +3180 -0
  296. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcreposix.c +419 -0
  297. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcreposix.h +146 -0
  298. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/pcretest.c +5488 -0
  299. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/perltest.pl +237 -0
  300. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitConfig.h +110 -0
  301. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitConfigInternal.h +484 -0
  302. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitExecAllocator.c +289 -0
  303. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitLir.c +1766 -0
  304. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitLir.h +985 -0
  305. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeARM_Thumb2.c +2008 -0
  306. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeARM_v5.c +2515 -0
  307. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeMIPS_32.c +404 -0
  308. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeMIPS_common.c +1881 -0
  309. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativePPC_32.c +269 -0
  310. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativePPC_64.c +421 -0
  311. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativePPC_common.c +2014 -0
  312. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeSPARC_32.c +164 -0
  313. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeSPARC_common.c +1348 -0
  314. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeX86_32.c +547 -0
  315. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeX86_64.c +810 -0
  316. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitNativeX86_common.c +2836 -0
  317. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/sljit/sljitUtils.c +332 -0
  318. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepbinary +0 -0
  319. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepfilelist +3 -0
  320. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinput +611 -0
  321. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinput3 +15 -0
  322. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinput8 +11 -0
  323. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinputv +4 -0
  324. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepinputx +43 -0
  325. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/greplist +7 -0
  326. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepoutput +707 -0
  327. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepoutput8 +12 -0
  328. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/grepoutputN +16 -1
  329. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/greppatN4 +2 -0
  330. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16 +0 -0
  331. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16BE-1 +0 -0
  332. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16BE-2 +0 -0
  333. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16LE-1 +0 -0
  334. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved16LE-2 +0 -0
  335. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32 +0 -0
  336. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32BE-1 +0 -0
  337. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32BE-2 +0 -0
  338. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32LE-1 +0 -0
  339. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved32LE-2 +0 -0
  340. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/saved8 +0 -0
  341. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput1 +5306 -0
  342. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput10 +1337 -0
  343. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput11 +135 -0
  344. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput12 +89 -0
  345. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput13 +9 -0
  346. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput14 +329 -0
  347. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput15 +430 -0
  348. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput16 +35 -0
  349. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput17 +296 -0
  350. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput18 +296 -0
  351. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput19 +22 -0
  352. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput2 +3813 -0
  353. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput20 +19 -0
  354. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput21 +16 -0
  355. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput22 +13 -0
  356. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput23 +16 -0
  357. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput24 +77 -0
  358. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput25 +32 -0
  359. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput26 +80 -0
  360. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput3 +95 -0
  361. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput4 +624 -0
  362. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput5 +772 -0
  363. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput6 +1319 -0
  364. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput7 +672 -0
  365. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput8 +4801 -0
  366. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinput9 +717 -0
  367. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testinputEBC +121 -0
  368. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput1 +8798 -0
  369. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput10 +2726 -0
  370. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput11-16 +713 -0
  371. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput11-32 +713 -0
  372. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput11-8 +713 -0
  373. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput12 +181 -0
  374. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput13 +21 -0
  375. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput14 +476 -0
  376. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput15 +1269 -0
  377. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput16 +121 -0
  378. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput17 +505 -0
  379. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput18-16 +1022 -0
  380. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput18-32 +1019 -0
  381. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput19 +88 -0
  382. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput2 +12484 -0
  383. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput20 +27 -0
  384. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput21-16 +90 -0
  385. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput21-32 +90 -0
  386. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput22-16 +71 -0
  387. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput22-32 +71 -0
  388. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput23 +42 -0
  389. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput24 +145 -0
  390. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput25 +79 -0
  391. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput26 +148 -0
  392. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput3 +169 -0
  393. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput4 +1094 -0
  394. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput5 +1849 -0
  395. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput6 +2137 -0
  396. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput7 +1473 -0
  397. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput8 +8019 -0
  398. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutput9 +1371 -0
  399. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/testoutputEBC +182 -0
  400. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/wintestinput3 +91 -0
  401. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/testdata/wintestoutput3 +166 -0
  402. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/pcre/ucp.h +197 -0
  403. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/run_test.rb +23 -0
  404. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/src/mruby_regexp_pcre.c +364 -0
  405. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/test/matchdata.rb +94 -0
  406. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/test/regexp.rb +264 -0
  407. data/resources/mruby/build/mrbgems/mruby-regexp-pcre/test/string.rb +201 -0
  408. data/resources/mruby/build_config.rb +152 -0
  409. data/resources/mruby/doc/guides/compile.md +488 -0
  410. data/resources/mruby/doc/guides/debugger.md +370 -0
  411. data/resources/mruby/doc/guides/gc-arena-howto.md +177 -0
  412. data/resources/mruby/doc/guides/mrbconf.md +146 -0
  413. data/resources/mruby/doc/guides/mrbgems.md +340 -0
  414. data/resources/mruby/doc/limitations.md +187 -0
  415. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/README.md +4 -0
  416. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +23 -0
  417. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +5 -0
  418. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +20 -0
  419. data/resources/mruby/examples/mrbgems/c_and_ruby_extension_example/test/example.rb +7 -0
  420. data/resources/mruby/examples/mrbgems/c_extension_example/README.md +4 -0
  421. data/resources/mruby/examples/mrbgems/c_extension_example/mrbgem.rake +23 -0
  422. data/resources/mruby/examples/mrbgems/c_extension_example/src/example.c +20 -0
  423. data/resources/mruby/examples/mrbgems/c_extension_example/test/example.c +7 -0
  424. data/resources/mruby/examples/mrbgems/c_extension_example/test/example.rb +3 -0
  425. data/resources/mruby/examples/mrbgems/ruby_extension_example/README.md +4 -0
  426. data/resources/mruby/examples/mrbgems/ruby_extension_example/mrbgem.rake +25 -0
  427. data/resources/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +5 -0
  428. data/resources/mruby/examples/mrbgems/ruby_extension_example/test/example.rb +3 -0
  429. data/resources/mruby/examples/targets/build_config_ArduinoDue.rb +90 -0
  430. data/resources/mruby/examples/targets/build_config_IntelEdison.rb +69 -0
  431. data/resources/mruby/examples/targets/build_config_IntelGalileo.rb +106 -0
  432. data/resources/mruby/examples/targets/build_config_RX630.rb +81 -0
  433. data/resources/mruby/examples/targets/build_config_android_arm64-v8a.rb +26 -0
  434. data/resources/mruby/examples/targets/build_config_android_armeabi.rb +26 -0
  435. data/resources/mruby/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb +28 -0
  436. data/resources/mruby/examples/targets/build_config_chipKITMax32.rb +86 -0
  437. data/resources/mruby/include/mrbconf.h +145 -0
  438. data/resources/mruby/include/mruby.h +1280 -0
  439. data/resources/mruby/include/mruby/array.h +279 -0
  440. data/resources/mruby/include/mruby/boxing_nan.h +102 -0
  441. data/resources/mruby/include/mruby/boxing_no.h +56 -0
  442. data/resources/mruby/include/mruby/boxing_word.h +136 -0
  443. data/resources/mruby/include/mruby/class.h +94 -0
  444. data/resources/mruby/include/mruby/common.h +72 -0
  445. data/resources/mruby/include/mruby/compile.h +194 -0
  446. data/resources/mruby/include/mruby/data.h +75 -0
  447. data/resources/mruby/include/mruby/debug.h +66 -0
  448. data/resources/mruby/include/mruby/dump.h +196 -0
  449. data/resources/mruby/include/mruby/error.h +75 -0
  450. data/resources/mruby/include/mruby/gc.h +91 -0
  451. data/resources/mruby/include/mruby/hash.h +182 -0
  452. data/resources/mruby/include/mruby/irep.h +62 -0
  453. data/resources/mruby/include/mruby/istruct.h +47 -0
  454. data/resources/mruby/include/mruby/khash.h +274 -0
  455. data/resources/mruby/include/mruby/numeric.h +161 -0
  456. data/resources/mruby/include/mruby/object.h +45 -0
  457. data/resources/mruby/include/mruby/opcode.h +161 -0
  458. data/resources/mruby/include/mruby/proc.h +131 -0
  459. data/resources/mruby/include/mruby/range.h +49 -0
  460. data/resources/mruby/include/mruby/re.h +16 -0
  461. data/resources/mruby/include/mruby/string.h +440 -0
  462. data/resources/mruby/include/mruby/throw.h +55 -0
  463. data/resources/mruby/include/mruby/value.h +309 -0
  464. data/resources/mruby/include/mruby/variable.h +138 -0
  465. data/resources/mruby/include/mruby/version.h +110 -0
  466. data/resources/mruby/lib/mruby-core-ext.rb +79 -0
  467. data/resources/mruby/lib/mruby/build.rb +355 -0
  468. data/resources/mruby/lib/mruby/build/command.rb +324 -0
  469. data/resources/mruby/lib/mruby/build/load_gems.rb +122 -0
  470. data/resources/mruby/lib/mruby/gem.rb +459 -0
  471. data/resources/mruby/lib/mruby/source.rb +30 -0
  472. data/resources/mruby/minirake +484 -0
  473. data/resources/mruby/mrbgems/default.gembox +82 -0
  474. data/resources/mruby/mrbgems/full-core.gembox +9 -0
  475. data/resources/mruby/mrbgems/mruby-array-ext/mrbgem.rake +6 -0
  476. data/resources/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +935 -0
  477. data/resources/mruby/mrbgems/mruby-array-ext/src/array.c +246 -0
  478. data/resources/mruby/mrbgems/mruby-array-ext/test/array.rb +422 -0
  479. data/resources/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +286 -0
  480. data/resources/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +701 -0
  481. data/resources/mruby/mrbgems/mruby-bin-debugger/mrbgem.rake +9 -0
  482. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +505 -0
  483. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.h +26 -0
  484. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c +240 -0
  485. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.h +14 -0
  486. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +78 -0
  487. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.h +13 -0
  488. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c +436 -0
  489. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c +502 -0
  490. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c +58 -0
  491. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c +64 -0
  492. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +759 -0
  493. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +165 -0
  494. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +16 -0
  495. data/resources/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h +20 -0
  496. data/resources/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +12 -0
  497. data/resources/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +33 -0
  498. data/resources/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +611 -0
  499. data/resources/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +16 -0
  500. data/resources/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +336 -0
  501. data/resources/mruby/mrbgems/mruby-bin-mruby-config/mrbgem.rake +30 -0
  502. data/resources/mruby/mrbgems/mruby-bin-mruby-config/mruby-config +20 -0
  503. data/resources/mruby/mrbgems/mruby-bin-mruby-config/mruby-config.bat +42 -0
  504. data/resources/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +60 -0
  505. data/resources/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +12 -0
  506. data/resources/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +254 -0
  507. data/resources/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +73 -0
  508. data/resources/mruby/mrbgems/mruby-bin-strip/mrbgem.rake +6 -0
  509. data/resources/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +155 -0
  510. data/resources/mruby/mrbgems/mruby-class-ext/mrbgem.rake +5 -0
  511. data/resources/mruby/mrbgems/mruby-class-ext/src/class.c +68 -0
  512. data/resources/mruby/mrbgems/mruby-class-ext/test/module.rb +55 -0
  513. data/resources/mruby/mrbgems/mruby-compar-ext/mrbgem.rake +5 -0
  514. data/resources/mruby/mrbgems/mruby-compar-ext/mrblib/compar.rb +31 -0
  515. data/resources/mruby/mrbgems/mruby-compiler/bintest/mrbc.rb +30 -0
  516. data/resources/mruby/mrbgems/mruby-compiler/core/codegen.c +3083 -0
  517. data/resources/mruby/mrbgems/mruby-compiler/core/keywords +50 -0
  518. data/resources/mruby/mrbgems/mruby-compiler/core/lex.def +211 -0
  519. data/resources/mruby/mrbgems/mruby-compiler/core/node.h +118 -0
  520. data/resources/mruby/mrbgems/mruby-compiler/core/parse.y +6661 -0
  521. data/resources/mruby/mrbgems/mruby-compiler/mrbgem.rake +40 -0
  522. data/resources/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +5 -0
  523. data/resources/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +813 -0
  524. data/resources/mruby/mrbgems/mruby-enum-ext/test/enum.rb +185 -0
  525. data/resources/mruby/mrbgems/mruby-enum-lazy/mrbgem.rake +7 -0
  526. data/resources/mruby/mrbgems/mruby-enum-lazy/mrblib/lazy.rb +178 -0
  527. data/resources/mruby/mrbgems/mruby-enum-lazy/test/lazy.rb +53 -0
  528. data/resources/mruby/mrbgems/mruby-enumerator/mrbgem.rake +7 -0
  529. data/resources/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +645 -0
  530. data/resources/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +546 -0
  531. data/resources/mruby/mrbgems/mruby-error/mrbgem.rake +10 -0
  532. data/resources/mruby/mrbgems/mruby-error/src/exception.c +100 -0
  533. data/resources/mruby/mrbgems/mruby-error/test/exception.c +59 -0
  534. data/resources/mruby/mrbgems/mruby-error/test/exception.rb +55 -0
  535. data/resources/mruby/mrbgems/mruby-eval/mrbgem.rake +7 -0
  536. data/resources/mruby/mrbgems/mruby-eval/src/eval.c +346 -0
  537. data/resources/mruby/mrbgems/mruby-eval/test/eval.rb +101 -0
  538. data/resources/mruby/mrbgems/mruby-exit/mrbgem.rake +5 -0
  539. data/resources/mruby/mrbgems/mruby-exit/src/mruby-exit.c +24 -0
  540. data/resources/mruby/mrbgems/mruby-fiber/mrbgem.rake +5 -0
  541. data/resources/mruby/mrbgems/mruby-fiber/src/fiber.c +420 -0
  542. data/resources/mruby/mrbgems/mruby-fiber/test/fiber.rb +208 -0
  543. data/resources/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +8 -0
  544. data/resources/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +502 -0
  545. data/resources/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +128 -0
  546. data/resources/mruby/mrbgems/mruby-hash-ext/test/hash.rb +300 -0
  547. data/resources/mruby/mrbgems/mruby-inline-struct/mrbgem.rake +5 -0
  548. data/resources/mruby/mrbgems/mruby-inline-struct/test/inline.c +83 -0
  549. data/resources/mruby/mrbgems/mruby-inline-struct/test/inline.rb +151 -0
  550. data/resources/mruby/mrbgems/mruby-io/README.md +193 -0
  551. data/resources/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +38 -0
  552. data/resources/mruby/mrbgems/mruby-io/mrbgem.rake +17 -0
  553. data/resources/mruby/mrbgems/mruby-io/mrblib/file.rb +208 -0
  554. data/resources/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +29 -0
  555. data/resources/mruby/mrbgems/mruby-io/mrblib/io.rb +387 -0
  556. data/resources/mruby/mrbgems/mruby-io/mrblib/kernel.rb +15 -0
  557. data/resources/mruby/mrbgems/mruby-io/run_test.rb +26 -0
  558. data/resources/mruby/mrbgems/mruby-io/src/file.c +489 -0
  559. data/resources/mruby/mrbgems/mruby-io/src/file_test.c +381 -0
  560. data/resources/mruby/mrbgems/mruby-io/src/io.c +1320 -0
  561. data/resources/mruby/mrbgems/mruby-io/src/mruby_io_gem.c +20 -0
  562. data/resources/mruby/mrbgems/mruby-io/test/file.rb +197 -0
  563. data/resources/mruby/mrbgems/mruby-io/test/file_test.rb +117 -0
  564. data/resources/mruby/mrbgems/mruby-io/test/gc_filedes.sh +4 -0
  565. data/resources/mruby/mrbgems/mruby-io/test/io.rb +642 -0
  566. data/resources/mruby/mrbgems/mruby-io/test/mruby_io_test.c +256 -0
  567. data/resources/mruby/mrbgems/mruby-kernel-ext/mrbgem.rake +5 -0
  568. data/resources/mruby/mrbgems/mruby-kernel-ext/mrblib/kernel.rb +13 -0
  569. data/resources/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +264 -0
  570. data/resources/mruby/mrbgems/mruby-kernel-ext/test/kernel.rb +86 -0
  571. data/resources/mruby/mrbgems/mruby-math/mrbgem.rake +5 -0
  572. data/resources/mruby/mrbgems/mruby-math/src/math.c +783 -0
  573. data/resources/mruby/mrbgems/mruby-math/test/math.rb +152 -0
  574. data/resources/mruby/mrbgems/mruby-method/README.md +59 -0
  575. data/resources/mruby/mrbgems/mruby-method/mrbgem.rake +7 -0
  576. data/resources/mruby/mrbgems/mruby-method/mrblib/kernel.rb +9 -0
  577. data/resources/mruby/mrbgems/mruby-method/mrblib/method.rb +20 -0
  578. data/resources/mruby/mrbgems/mruby-method/mrblib/unbound_method.rb +9 -0
  579. data/resources/mruby/mrbgems/mruby-method/src/method.c +418 -0
  580. data/resources/mruby/mrbgems/mruby-method/test/method.rb +425 -0
  581. data/resources/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +5 -0
  582. data/resources/mruby/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +25 -0
  583. data/resources/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +102 -0
  584. data/resources/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +28 -0
  585. data/resources/mruby/mrbgems/mruby-object-ext/mrbgem.rake +5 -0
  586. data/resources/mruby/mrbgems/mruby-object-ext/mrblib/object.rb +19 -0
  587. data/resources/mruby/mrbgems/mruby-object-ext/src/object.c +112 -0
  588. data/resources/mruby/mrbgems/mruby-object-ext/test/nil.rb +11 -0
  589. data/resources/mruby/mrbgems/mruby-object-ext/test/object.rb +53 -0
  590. data/resources/mruby/mrbgems/mruby-objectspace/mrbgem.rake +5 -0
  591. data/resources/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +187 -0
  592. data/resources/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +60 -0
  593. data/resources/mruby/mrbgems/mruby-pack/README.md +70 -0
  594. data/resources/mruby/mrbgems/mruby-pack/mrbgem.rake +7 -0
  595. data/resources/mruby/mrbgems/mruby-pack/packtest.rb +157 -0
  596. data/resources/mruby/mrbgems/mruby-pack/run_test.rb +26 -0
  597. data/resources/mruby/mrbgems/mruby-pack/src/pack.c +1281 -0
  598. data/resources/mruby/mrbgems/mruby-pack/test/pack.rb +165 -0
  599. data/resources/mruby/mrbgems/mruby-print/mrbgem.rake +5 -0
  600. data/resources/mruby/mrbgems/mruby-print/mrblib/print.rb +64 -0
  601. data/resources/mruby/mrbgems/mruby-print/src/print.c +64 -0
  602. data/resources/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +5 -0
  603. data/resources/mruby/mrbgems/mruby-proc-ext/mrblib/proc.rb +42 -0
  604. data/resources/mruby/mrbgems/mruby-proc-ext/src/proc.c +173 -0
  605. data/resources/mruby/mrbgems/mruby-proc-ext/test/proc.c +62 -0
  606. data/resources/mruby/mrbgems/mruby-proc-ext/test/proc.rb +96 -0
  607. data/resources/mruby/mrbgems/mruby-random/mrbgem.rake +5 -0
  608. data/resources/mruby/mrbgems/mruby-random/src/mt19937ar.c +224 -0
  609. data/resources/mruby/mrbgems/mruby-random/src/mt19937ar.h +80 -0
  610. data/resources/mruby/mrbgems/mruby-random/src/random.c +349 -0
  611. data/resources/mruby/mrbgems/mruby-random/src/random.h +12 -0
  612. data/resources/mruby/mrbgems/mruby-random/test/random.rb +88 -0
  613. data/resources/mruby/mrbgems/mruby-range-ext/mrbgem.rake +5 -0
  614. data/resources/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +31 -0
  615. data/resources/mruby/mrbgems/mruby-range-ext/src/range.c +176 -0
  616. data/resources/mruby/mrbgems/mruby-range-ext/test/range.rb +32 -0
  617. data/resources/mruby/mrbgems/mruby-socket/README.md +55 -0
  618. data/resources/mruby/mrbgems/mruby-socket/mrbgem.rake +17 -0
  619. data/resources/mruby/mrbgems/mruby-socket/mrblib/socket.rb +621 -0
  620. data/resources/mruby/mrbgems/mruby-socket/run_test.rb +28 -0
  621. data/resources/mruby/mrbgems/mruby-socket/src/const.cstub +453 -0
  622. data/resources/mruby/mrbgems/mruby-socket/src/const.def +163 -0
  623. data/resources/mruby/mrbgems/mruby-socket/src/gen.rb +17 -0
  624. data/resources/mruby/mrbgems/mruby-socket/src/socket.c +928 -0
  625. data/resources/mruby/mrbgems/mruby-socket/test/addrinfo.rb +91 -0
  626. data/resources/mruby/mrbgems/mruby-socket/test/basicsocket.rb +17 -0
  627. data/resources/mruby/mrbgems/mruby-socket/test/ipsocket.rb +44 -0
  628. data/resources/mruby/mrbgems/mruby-socket/test/socket.rb +38 -0
  629. data/resources/mruby/mrbgems/mruby-socket/test/sockettest.c +46 -0
  630. data/resources/mruby/mrbgems/mruby-socket/test/tcpsocket.rb +4 -0
  631. data/resources/mruby/mrbgems/mruby-socket/test/udpsocket.rb +16 -0
  632. data/resources/mruby/mrbgems/mruby-socket/test/unix.rb +130 -0
  633. data/resources/mruby/mrbgems/mruby-sprintf/mrbgem.rake +5 -0
  634. data/resources/mruby/mrbgems/mruby-sprintf/mrblib/string.rb +9 -0
  635. data/resources/mruby/mrbgems/mruby-sprintf/src/kernel.c +30 -0
  636. data/resources/mruby/mrbgems/mruby-sprintf/src/sprintf.c +1126 -0
  637. data/resources/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +110 -0
  638. data/resources/mruby/mrbgems/mruby-string-ext/mrbgem.rake +6 -0
  639. data/resources/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +368 -0
  640. data/resources/mruby/mrbgems/mruby-string-ext/src/string.c +804 -0
  641. data/resources/mruby/mrbgems/mruby-string-ext/test/string.rb +682 -0
  642. data/resources/mruby/mrbgems/mruby-struct/mrbgem.rake +5 -0
  643. data/resources/mruby/mrbgems/mruby-struct/mrblib/struct.rb +103 -0
  644. data/resources/mruby/mrbgems/mruby-struct/src/struct.c +726 -0
  645. data/resources/mruby/mrbgems/mruby-struct/test/struct.rb +205 -0
  646. data/resources/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +5 -0
  647. data/resources/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +78 -0
  648. data/resources/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +64 -0
  649. data/resources/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +48 -0
  650. data/resources/mruby/mrbgems/mruby-test/README.md +7 -0
  651. data/resources/mruby/mrbgems/mruby-test/driver.c +175 -0
  652. data/resources/mruby/mrbgems/mruby-test/init_mrbtest.c +38 -0
  653. data/resources/mruby/mrbgems/mruby-test/mrbgem.rake +191 -0
  654. data/resources/mruby/mrbgems/mruby-time/mrbgem.rake +5 -0
  655. data/resources/mruby/mrbgems/mruby-time/mrblib/time.rb +9 -0
  656. data/resources/mruby/mrbgems/mruby-time/src/time.c +869 -0
  657. data/resources/mruby/mrbgems/mruby-time/test/time.rb +228 -0
  658. data/resources/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +5 -0
  659. data/resources/mruby/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb +11 -0
  660. data/resources/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +24 -0
  661. data/resources/mruby/mrblib/00class.rb +29 -0
  662. data/resources/mruby/mrblib/10error.rb +59 -0
  663. data/resources/mruby/mrblib/array.rb +243 -0
  664. data/resources/mruby/mrblib/compar.rb +84 -0
  665. data/resources/mruby/mrblib/enum.rb +348 -0
  666. data/resources/mruby/mrblib/float.rb +9 -0
  667. data/resources/mruby/mrblib/hash.rb +358 -0
  668. data/resources/mruby/mrblib/init_mrblib.c +11 -0
  669. data/resources/mruby/mrblib/kernel.rb +50 -0
  670. data/resources/mruby/mrblib/mrblib.rake +21 -0
  671. data/resources/mruby/mrblib/numeric.rb +163 -0
  672. data/resources/mruby/mrblib/range.rb +67 -0
  673. data/resources/mruby/mrblib/string.rb +275 -0
  674. data/resources/mruby/mruby-source.gemspec +18 -0
  675. data/resources/mruby/src/array.c +1251 -0
  676. data/resources/mruby/src/backtrace.c +285 -0
  677. data/resources/mruby/src/class.c +2546 -0
  678. data/resources/mruby/src/codedump.c +477 -0
  679. data/resources/mruby/src/compar.c +13 -0
  680. data/resources/mruby/src/crc.c +39 -0
  681. data/resources/mruby/src/debug.c +217 -0
  682. data/resources/mruby/src/dump.c +1106 -0
  683. data/resources/mruby/src/enum.c +14 -0
  684. data/resources/mruby/src/error.c +513 -0
  685. data/resources/mruby/src/error.h +3 -0
  686. data/resources/mruby/src/etc.c +246 -0
  687. data/resources/mruby/src/fmt_fp.c +374 -0
  688. data/resources/mruby/src/gc.c +1835 -0
  689. data/resources/mruby/src/hash.c +916 -0
  690. data/resources/mruby/src/init.c +51 -0
  691. data/resources/mruby/src/kernel.c +1264 -0
  692. data/resources/mruby/src/load.c +706 -0
  693. data/resources/mruby/src/mruby_core.rake +20 -0
  694. data/resources/mruby/src/numeric.c +1574 -0
  695. data/resources/mruby/src/object.c +618 -0
  696. data/resources/mruby/src/opcode.h +2 -0
  697. data/resources/mruby/src/pool.c +209 -0
  698. data/resources/mruby/src/print.c +47 -0
  699. data/resources/mruby/src/proc.c +313 -0
  700. data/resources/mruby/src/range.c +446 -0
  701. data/resources/mruby/src/state.c +307 -0
  702. data/resources/mruby/src/string.c +3025 -0
  703. data/resources/mruby/src/symbol.c +494 -0
  704. data/resources/mruby/src/value_array.h +27 -0
  705. data/resources/mruby/src/variable.c +982 -0
  706. data/resources/mruby/src/version.c +17 -0
  707. data/resources/mruby/src/vm.c +3020 -0
  708. data/resources/mruby/tasks/benchmark.rake +91 -0
  709. data/resources/mruby/tasks/gitlab.rake +118 -0
  710. data/resources/mruby/tasks/libmruby.rake +24 -0
  711. data/resources/mruby/tasks/mrbgems.rake +98 -0
  712. data/resources/mruby/tasks/toolchains/android.rake +321 -0
  713. data/resources/mruby/tasks/toolchains/clang.rake +9 -0
  714. data/resources/mruby/tasks/toolchains/gcc.rake +66 -0
  715. data/resources/mruby/tasks/toolchains/openwrt.rake +38 -0
  716. data/resources/mruby/tasks/toolchains/visualcpp.rake +68 -0
  717. data/resources/mruby/test/assert.rb +249 -0
  718. data/resources/mruby/test/bintest.rb +33 -0
  719. data/resources/mruby/test/report.rb +4 -0
  720. data/resources/mruby/test/t/argumenterror.rb +16 -0
  721. data/resources/mruby/test/t/array.rb +394 -0
  722. data/resources/mruby/test/t/basicobject.rb +11 -0
  723. data/resources/mruby/test/t/bs_block.rb +521 -0
  724. data/resources/mruby/test/t/bs_literal.rb +38 -0
  725. data/resources/mruby/test/t/class.rb +451 -0
  726. data/resources/mruby/test/t/codegen.rb +197 -0
  727. data/resources/mruby/test/t/comparable.rb +80 -0
  728. data/resources/mruby/test/t/ensure.rb +54 -0
  729. data/resources/mruby/test/t/enumerable.rb +134 -0
  730. data/resources/mruby/test/t/exception.rb +422 -0
  731. data/resources/mruby/test/t/false.rb +31 -0
  732. data/resources/mruby/test/t/float.rb +209 -0
  733. data/resources/mruby/test/t/gc.rb +45 -0
  734. data/resources/mruby/test/t/hash.rb +375 -0
  735. data/resources/mruby/test/t/indexerror.rb +6 -0
  736. data/resources/mruby/test/t/integer.rb +277 -0
  737. data/resources/mruby/test/t/iterations.rb +61 -0
  738. data/resources/mruby/test/t/kernel.rb +600 -0
  739. data/resources/mruby/test/t/lang.rb +74 -0
  740. data/resources/mruby/test/t/literals.rb +337 -0
  741. data/resources/mruby/test/t/localjumperror.rb +13 -0
  742. data/resources/mruby/test/t/methods.rb +109 -0
  743. data/resources/mruby/test/t/module.rb +914 -0
  744. data/resources/mruby/test/t/nameerror.rb +28 -0
  745. data/resources/mruby/test/t/nil.rb +39 -0
  746. data/resources/mruby/test/t/nomethoderror.rb +22 -0
  747. data/resources/mruby/test/t/numeric.rb +43 -0
  748. data/resources/mruby/test/t/object.rb +11 -0
  749. data/resources/mruby/test/t/proc.rb +180 -0
  750. data/resources/mruby/test/t/range.rb +95 -0
  751. data/resources/mruby/test/t/rangeerror.rb +6 -0
  752. data/resources/mruby/test/t/regexperror.rb +4 -0
  753. data/resources/mruby/test/t/runtimeerror.rb +6 -0
  754. data/resources/mruby/test/t/standarderror.rb +6 -0
  755. data/resources/mruby/test/t/string.rb +728 -0
  756. data/resources/mruby/test/t/superclass.rb +47 -0
  757. data/resources/mruby/test/t/symbol.rb +30 -0
  758. data/resources/mruby/test/t/syntax.rb +468 -0
  759. data/resources/mruby/test/t/true.rb +31 -0
  760. data/resources/mruby/test/t/typeerror.rb +6 -0
  761. data/resources/mruby/test/t/unicode.rb +39 -0
  762. data/resources/mruby/travis_config.rb +53 -0
  763. metadata +806 -0
@@ -0,0 +1,381 @@
1
+ /*
2
+ ** file.c - File class
3
+ */
4
+
5
+ #include "mruby.h"
6
+ #include "mruby/class.h"
7
+ #include "mruby/data.h"
8
+ #include "mruby/string.h"
9
+ #include "mruby/ext/io.h"
10
+
11
+ #if MRUBY_RELEASE_NO < 10000
12
+ #include "error.h"
13
+ #else
14
+ #include "mruby/error.h"
15
+ #endif
16
+
17
+ #include <sys/types.h>
18
+ #include <sys/stat.h>
19
+
20
+ #if defined(_WIN32) || defined(_WIN64)
21
+ #define LSTAT stat
22
+ #include <winsock.h>
23
+ #else
24
+ #define LSTAT lstat
25
+ #include <sys/file.h>
26
+ #include <sys/param.h>
27
+ #include <sys/wait.h>
28
+ #include <libgen.h>
29
+ #include <pwd.h>
30
+ #include <unistd.h>
31
+ #endif
32
+
33
+ #include <fcntl.h>
34
+
35
+ #include <errno.h>
36
+ #include <stdio.h>
37
+ #include <stdlib.h>
38
+ #include <string.h>
39
+
40
+ extern struct mrb_data_type mrb_io_type;
41
+
42
+ static int
43
+ mrb_stat0(mrb_state *mrb, mrb_value obj, struct stat *st, int do_lstat)
44
+ {
45
+ mrb_value tmp;
46
+ mrb_value io_klass, str_klass;
47
+
48
+ io_klass = mrb_obj_value(mrb_class_get(mrb, "IO"));
49
+ str_klass = mrb_obj_value(mrb_class_get(mrb, "String"));
50
+
51
+ tmp = mrb_funcall(mrb, obj, "is_a?", 1, io_klass);
52
+ if (mrb_test(tmp)) {
53
+ struct mrb_io *fptr;
54
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, obj, &mrb_io_type);
55
+
56
+ if (fptr && fptr->fd >= 0) {
57
+ return fstat(fptr->fd, st);
58
+ }
59
+
60
+ mrb_raise(mrb, E_IO_ERROR, "closed stream");
61
+ return -1;
62
+ }
63
+
64
+ tmp = mrb_funcall(mrb, obj, "is_a?", 1, str_klass);
65
+ if (mrb_test(tmp)) {
66
+ char *path = mrb_locale_from_utf8(mrb_str_to_cstr(mrb, obj), -1);
67
+ int ret;
68
+ if (do_lstat) {
69
+ ret = LSTAT(path, st);
70
+ } else {
71
+ ret = stat(path, st);
72
+ }
73
+ mrb_locale_free(path);
74
+ return ret;
75
+ }
76
+
77
+ return -1;
78
+ }
79
+
80
+ static int
81
+ mrb_stat(mrb_state *mrb, mrb_value obj, struct stat *st)
82
+ {
83
+ return mrb_stat0(mrb, obj, st, 0);
84
+ }
85
+
86
+ static int
87
+ mrb_lstat(mrb_state *mrb, mrb_value obj, struct stat *st)
88
+ {
89
+ return mrb_stat0(mrb, obj, st, 1);
90
+ }
91
+
92
+ /*
93
+ * Document-method: directory?
94
+ *
95
+ * call-seq:
96
+ * File.directory?(file_name) -> true or false
97
+ *
98
+ * Returns <code>true</code> if the named file is a directory,
99
+ * or a symlink that points at a directory, and <code>false</code>
100
+ * otherwise.
101
+ *
102
+ * File.directory?(".")
103
+ */
104
+
105
+ mrb_value
106
+ mrb_filetest_s_directory_p(mrb_state *mrb, mrb_value klass)
107
+ {
108
+ #ifndef S_ISDIR
109
+ # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
110
+ #endif
111
+
112
+ struct stat st;
113
+ mrb_value obj;
114
+
115
+ mrb_get_args(mrb, "o", &obj);
116
+
117
+ if (mrb_stat(mrb, obj, &st) < 0)
118
+ return mrb_false_value();
119
+ if (S_ISDIR(st.st_mode))
120
+ return mrb_true_value();
121
+
122
+ return mrb_false_value();
123
+ }
124
+
125
+ /*
126
+ * call-seq:
127
+ * File.pipe?(file_name) -> true or false
128
+ *
129
+ * Returns <code>true</code> if the named file is a pipe.
130
+ */
131
+
132
+ mrb_value
133
+ mrb_filetest_s_pipe_p(mrb_state *mrb, mrb_value klass)
134
+ {
135
+ #if defined(_WIN32) || defined(_WIN64)
136
+ mrb_raise(mrb, E_NOTIMP_ERROR, "pipe is not supported on this platform");
137
+ #else
138
+ #ifdef S_IFIFO
139
+ # ifndef S_ISFIFO
140
+ # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
141
+ # endif
142
+
143
+ struct stat st;
144
+ mrb_value obj;
145
+
146
+ mrb_get_args(mrb, "o", &obj);
147
+
148
+ if (mrb_stat(mrb, obj, &st) < 0)
149
+ return mrb_false_value();
150
+ if (S_ISFIFO(st.st_mode))
151
+ return mrb_true_value();
152
+
153
+ #endif
154
+ return mrb_false_value();
155
+ #endif
156
+ }
157
+
158
+ /*
159
+ * call-seq:
160
+ * File.symlink?(file_name) -> true or false
161
+ *
162
+ * Returns <code>true</code> if the named file is a symbolic link.
163
+ */
164
+
165
+ mrb_value
166
+ mrb_filetest_s_symlink_p(mrb_state *mrb, mrb_value klass)
167
+ {
168
+ #if defined(_WIN32) || defined(_WIN64)
169
+ mrb_raise(mrb, E_NOTIMP_ERROR, "symlink is not supported on this platform");
170
+ #else
171
+ #ifndef S_ISLNK
172
+ # ifdef _S_ISLNK
173
+ # define S_ISLNK(m) _S_ISLNK(m)
174
+ # else
175
+ # ifdef _S_IFLNK
176
+ # define S_ISLNK(m) (((m) & S_IFMT) == _S_IFLNK)
177
+ # else
178
+ # ifdef S_IFLNK
179
+ # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
180
+ # endif
181
+ # endif
182
+ # endif
183
+ #endif
184
+
185
+ #ifdef S_ISLNK
186
+ struct stat st;
187
+ mrb_value obj;
188
+
189
+ mrb_get_args(mrb, "o", &obj);
190
+
191
+ if (mrb_lstat(mrb, obj, &st) == -1)
192
+ return mrb_false_value();
193
+ if (S_ISLNK(st.st_mode))
194
+ return mrb_true_value();
195
+ #endif
196
+
197
+ return mrb_false_value();
198
+ #endif
199
+ }
200
+
201
+ /*
202
+ * call-seq:
203
+ * File.socket?(file_name) -> true or false
204
+ *
205
+ * Returns <code>true</code> if the named file is a socket.
206
+ */
207
+
208
+ mrb_value
209
+ mrb_filetest_s_socket_p(mrb_state *mrb, mrb_value klass)
210
+ {
211
+ #if defined(_WIN32) || defined(_WIN64)
212
+ mrb_raise(mrb, E_NOTIMP_ERROR, "socket is not supported on this platform");
213
+ #else
214
+ #ifndef S_ISSOCK
215
+ # ifdef _S_ISSOCK
216
+ # define S_ISSOCK(m) _S_ISSOCK(m)
217
+ # else
218
+ # ifdef _S_IFSOCK
219
+ # define S_ISSOCK(m) (((m) & S_IFMT) == _S_IFSOCK)
220
+ # else
221
+ # ifdef S_IFSOCK
222
+ # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
223
+ # endif
224
+ # endif
225
+ # endif
226
+ #endif
227
+
228
+ #ifdef S_ISSOCK
229
+ struct stat st;
230
+ mrb_value obj;
231
+
232
+ mrb_get_args(mrb, "o", &obj);
233
+
234
+ if (mrb_stat(mrb, obj, &st) < 0)
235
+ return mrb_false_value();
236
+ if (S_ISSOCK(st.st_mode))
237
+ return mrb_true_value();
238
+ #endif
239
+
240
+ return mrb_false_value();
241
+ #endif
242
+ }
243
+
244
+ /*
245
+ * call-seq:
246
+ * File.exist?(file_name) -> true or false
247
+ * File.exists?(file_name) -> true or false
248
+ *
249
+ * Return <code>true</code> if the named file exists.
250
+ */
251
+
252
+ mrb_value
253
+ mrb_filetest_s_exist_p(mrb_state *mrb, mrb_value klass)
254
+ {
255
+ struct stat st;
256
+ mrb_value obj;
257
+
258
+ mrb_get_args(mrb, "o", &obj);
259
+ if (mrb_stat(mrb, obj, &st) < 0)
260
+ return mrb_false_value();
261
+
262
+ return mrb_true_value();
263
+ }
264
+
265
+ /*
266
+ * call-seq:
267
+ * File.file?(file_name) -> true or false
268
+ *
269
+ * Returns <code>true</code> if the named file exists and is a
270
+ * regular file.
271
+ */
272
+
273
+ mrb_value
274
+ mrb_filetest_s_file_p(mrb_state *mrb, mrb_value klass)
275
+ {
276
+ #ifndef S_ISREG
277
+ # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
278
+ #endif
279
+
280
+ struct stat st;
281
+ mrb_value obj;
282
+
283
+ mrb_get_args(mrb, "o", &obj);
284
+
285
+ if (mrb_stat(mrb, obj, &st) < 0)
286
+ return mrb_false_value();
287
+ if (S_ISREG(st.st_mode))
288
+ return mrb_true_value();
289
+
290
+ return mrb_false_value();
291
+ }
292
+
293
+ /*
294
+ * call-seq:
295
+ * File.zero?(file_name) -> true or false
296
+ *
297
+ * Returns <code>true</code> if the named file exists and has
298
+ * a zero size.
299
+ */
300
+
301
+ mrb_value
302
+ mrb_filetest_s_zero_p(mrb_state *mrb, mrb_value klass)
303
+ {
304
+ struct stat st;
305
+ mrb_value obj;
306
+
307
+ mrb_get_args(mrb, "o", &obj);
308
+
309
+ if (mrb_stat(mrb, obj, &st) < 0)
310
+ return mrb_false_value();
311
+ if (st.st_size == 0)
312
+ return mrb_true_value();
313
+
314
+ return mrb_false_value();
315
+ }
316
+
317
+ /*
318
+ * call-seq:
319
+ * File.size(file_name) -> integer
320
+ *
321
+ * Returns the size of <code>file_name</code>.
322
+ *
323
+ * _file_name_ can be an IO object.
324
+ */
325
+
326
+ mrb_value
327
+ mrb_filetest_s_size(mrb_state *mrb, mrb_value klass)
328
+ {
329
+ struct stat st;
330
+ mrb_value obj;
331
+
332
+ mrb_get_args(mrb, "o", &obj);
333
+
334
+ if (mrb_stat(mrb, obj, &st) < 0)
335
+ mrb_sys_fail(mrb, "mrb_stat");
336
+
337
+ return mrb_fixnum_value(st.st_size);
338
+ }
339
+
340
+ /*
341
+ * call-seq:
342
+ * File.size?(file_name) -> Integer or nil
343
+ *
344
+ * Returns +nil+ if +file_name+ doesn't exist or has zero size, the size of the
345
+ * file otherwise.
346
+ */
347
+
348
+ mrb_value
349
+ mrb_filetest_s_size_p(mrb_state *mrb, mrb_value klass)
350
+ {
351
+ struct stat st;
352
+ mrb_value obj;
353
+
354
+ mrb_get_args(mrb, "o", &obj);
355
+
356
+ if (mrb_stat(mrb, obj, &st) < 0)
357
+ return mrb_nil_value();
358
+ if (st.st_size == 0)
359
+ return mrb_nil_value();
360
+
361
+ return mrb_fixnum_value(st.st_size);
362
+ }
363
+
364
+ void
365
+ mrb_init_file_test(mrb_state *mrb)
366
+ {
367
+ struct RClass *f;
368
+
369
+ f = mrb_define_class(mrb, "FileTest", mrb->object_class);
370
+
371
+ mrb_define_class_method(mrb, f, "directory?", mrb_filetest_s_directory_p, MRB_ARGS_REQ(1));
372
+ mrb_define_class_method(mrb, f, "exist?", mrb_filetest_s_exist_p, MRB_ARGS_REQ(1));
373
+ mrb_define_class_method(mrb, f, "exists?", mrb_filetest_s_exist_p, MRB_ARGS_REQ(1));
374
+ mrb_define_class_method(mrb, f, "file?", mrb_filetest_s_file_p, MRB_ARGS_REQ(1));
375
+ mrb_define_class_method(mrb, f, "pipe?", mrb_filetest_s_pipe_p, MRB_ARGS_REQ(1));
376
+ mrb_define_class_method(mrb, f, "size", mrb_filetest_s_size, MRB_ARGS_REQ(1));
377
+ mrb_define_class_method(mrb, f, "size?", mrb_filetest_s_size_p, MRB_ARGS_REQ(1));
378
+ mrb_define_class_method(mrb, f, "socket?", mrb_filetest_s_socket_p, MRB_ARGS_REQ(1));
379
+ mrb_define_class_method(mrb, f, "symlink?", mrb_filetest_s_symlink_p, MRB_ARGS_REQ(1));
380
+ mrb_define_class_method(mrb, f, "zero?", mrb_filetest_s_zero_p, MRB_ARGS_REQ(1));
381
+ }
@@ -0,0 +1,1320 @@
1
+ /*
2
+ ** io.c - IO class
3
+ */
4
+
5
+ #include "mruby.h"
6
+ #include "mruby/array.h"
7
+ #include "mruby/class.h"
8
+ #include "mruby/data.h"
9
+ #include "mruby/hash.h"
10
+ #include "mruby/string.h"
11
+ #include "mruby/variable.h"
12
+ #include "mruby/ext/io.h"
13
+
14
+ #if MRUBY_RELEASE_NO < 10000
15
+ #include "error.h"
16
+ #else
17
+ #include "mruby/error.h"
18
+ #endif
19
+
20
+ #include <sys/types.h>
21
+ #include <sys/stat.h>
22
+
23
+ #if defined(_WIN32) || defined(_WIN64)
24
+ #include <winsock.h>
25
+ #include <io.h>
26
+ #define open _open
27
+ #define close _close
28
+ #define dup _dup
29
+ #define dup2 _dup2
30
+ #define read _read
31
+ #define write _write
32
+ #define lseek _lseek
33
+ #define isatty _isatty
34
+ #define WEXITSTATUS(x) (x)
35
+ typedef int fsize_t;
36
+ typedef long ftime_t;
37
+ typedef long fsuseconds_t;
38
+ typedef int fmode_t;
39
+
40
+ #else
41
+ #include <sys/wait.h>
42
+ #include <unistd.h>
43
+ typedef size_t fsize_t;
44
+ typedef time_t ftime_t;
45
+ typedef suseconds_t fsuseconds_t;
46
+ typedef mode_t fmode_t;
47
+ #endif
48
+
49
+ #ifdef _MSC_VER
50
+ typedef mrb_int pid_t;
51
+ #endif
52
+
53
+ #include <fcntl.h>
54
+
55
+ #include <errno.h>
56
+ #include <stdio.h>
57
+ #include <string.h>
58
+
59
+
60
+ static void mrb_io_free(mrb_state *mrb, void *ptr);
61
+ struct mrb_data_type mrb_io_type = { "IO", mrb_io_free };
62
+
63
+
64
+ static struct mrb_io *io_get_open_fptr(mrb_state *mrb, mrb_value self);
65
+ static int mrb_io_modestr_to_flags(mrb_state *mrb, const char *modestr);
66
+ static int mrb_io_flags_to_modenum(mrb_state *mrb, int flags);
67
+ static void fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet);
68
+
69
+ #if MRUBY_RELEASE_NO < 10000
70
+ static struct RClass *
71
+ mrb_module_get(mrb_state *mrb, const char *name)
72
+ {
73
+ return mrb_class_get(mrb, name);
74
+ }
75
+ #endif
76
+
77
+ static struct mrb_io *
78
+ io_get_open_fptr(mrb_state *mrb, mrb_value self)
79
+ {
80
+ struct mrb_io *fptr;
81
+
82
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, self, &mrb_io_type);
83
+ if (fptr->fd < 0) {
84
+ mrb_raise(mrb, E_IO_ERROR, "closed stream.");
85
+ }
86
+ return fptr;
87
+ }
88
+
89
+ static void
90
+ io_set_process_status(mrb_state *mrb, pid_t pid, int status)
91
+ {
92
+ struct RClass *c_process, *c_status;
93
+ mrb_value v;
94
+
95
+ c_status = NULL;
96
+ if (mrb_class_defined(mrb, "Process")) {
97
+ c_process = mrb_module_get(mrb, "Process");
98
+ if (mrb_const_defined(mrb, mrb_obj_value(c_process), mrb_intern_cstr(mrb, "Status"))) {
99
+ c_status = mrb_class_get_under(mrb, c_process, "Status");
100
+ }
101
+ }
102
+ if (c_status != NULL) {
103
+ v = mrb_funcall(mrb, mrb_obj_value(c_status), "new", 2, mrb_fixnum_value(pid), mrb_fixnum_value(status));
104
+ } else {
105
+ v = mrb_fixnum_value(WEXITSTATUS(status));
106
+ }
107
+ mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$?"), v);
108
+ }
109
+
110
+ static int
111
+ mrb_io_modestr_to_flags(mrb_state *mrb, const char *mode)
112
+ {
113
+ int flags = 0;
114
+ const char *m = mode;
115
+
116
+ switch (*m++) {
117
+ case 'r':
118
+ flags |= FMODE_READABLE;
119
+ break;
120
+ case 'w':
121
+ flags |= FMODE_WRITABLE | FMODE_CREATE | FMODE_TRUNC;
122
+ break;
123
+ case 'a':
124
+ flags |= FMODE_WRITABLE | FMODE_APPEND | FMODE_CREATE;
125
+ break;
126
+ default:
127
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal access mode %S", mrb_str_new_cstr(mrb, mode));
128
+ }
129
+
130
+ while (*m) {
131
+ switch (*m++) {
132
+ case 'b':
133
+ flags |= FMODE_BINMODE;
134
+ break;
135
+ case '+':
136
+ flags |= FMODE_READWRITE;
137
+ break;
138
+ case ':':
139
+ /* XXX: PASSTHROUGH*/
140
+ default:
141
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal access mode %S", mrb_str_new_cstr(mrb, mode));
142
+ }
143
+ }
144
+
145
+ return flags;
146
+ }
147
+
148
+ static int
149
+ mrb_io_flags_to_modenum(mrb_state *mrb, int flags)
150
+ {
151
+ int modenum = 0;
152
+
153
+ switch(flags & (FMODE_READABLE|FMODE_WRITABLE|FMODE_READWRITE)) {
154
+ case FMODE_READABLE:
155
+ modenum = O_RDONLY;
156
+ break;
157
+ case FMODE_WRITABLE:
158
+ modenum = O_WRONLY;
159
+ break;
160
+ case FMODE_READWRITE:
161
+ modenum = O_RDWR;
162
+ break;
163
+ }
164
+
165
+ if (flags & FMODE_APPEND) {
166
+ modenum |= O_APPEND;
167
+ }
168
+ if (flags & FMODE_TRUNC) {
169
+ modenum |= O_TRUNC;
170
+ }
171
+ if (flags & FMODE_CREATE) {
172
+ modenum |= O_CREAT;
173
+ }
174
+ #ifdef O_BINARY
175
+ if (flags & FMODE_BINMODE) {
176
+ modenum |= O_BINARY;
177
+ }
178
+ #endif
179
+
180
+ return modenum;
181
+ }
182
+
183
+ void
184
+ mrb_fd_cloexec(mrb_state *mrb, int fd)
185
+ {
186
+ #if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
187
+ int flags, flags2;
188
+
189
+ flags = fcntl(fd, F_GETFD);
190
+ if (flags == -1) {
191
+ mrb_sys_fail(mrb, "fcntl");
192
+ }
193
+ if (fd <= 2) {
194
+ flags2 = flags & ~FD_CLOEXEC; /* Clear CLOEXEC for standard file descriptors: 0, 1, 2. */
195
+ }
196
+ else {
197
+ flags2 = flags | FD_CLOEXEC; /* Set CLOEXEC for non-standard file descriptors: 3, 4, 5, ... */
198
+ }
199
+ if (flags != flags2) {
200
+ if (fcntl(fd, F_SETFD, flags2) == -1) {
201
+ mrb_sys_fail(mrb, "fcntl");
202
+ }
203
+ }
204
+ #endif
205
+ }
206
+
207
+ #ifndef _WIN32
208
+ static int
209
+ mrb_cloexec_pipe(mrb_state *mrb, int fildes[2])
210
+ {
211
+ int ret;
212
+ ret = pipe(fildes);
213
+ if (ret == -1)
214
+ return -1;
215
+ mrb_fd_cloexec(mrb, fildes[0]);
216
+ mrb_fd_cloexec(mrb, fildes[1]);
217
+ return ret;
218
+ }
219
+
220
+ static int
221
+ mrb_pipe(mrb_state *mrb, int pipes[2])
222
+ {
223
+ int ret;
224
+ ret = mrb_cloexec_pipe(mrb, pipes);
225
+ if (ret == -1) {
226
+ if (errno == EMFILE || errno == ENFILE) {
227
+ mrb_garbage_collect(mrb);
228
+ ret = mrb_cloexec_pipe(mrb, pipes);
229
+ }
230
+ }
231
+ return ret;
232
+ }
233
+
234
+ static int
235
+ mrb_proc_exec(const char *pname)
236
+ {
237
+ const char *s;
238
+ s = pname;
239
+
240
+ while (*s == ' ' || *s == '\t' || *s == '\n')
241
+ s++;
242
+
243
+ if (!*s) {
244
+ errno = ENOENT;
245
+ return -1;
246
+ }
247
+
248
+ execl("/bin/sh", "sh", "-c", pname, (char *)NULL);
249
+ return -1;
250
+ }
251
+ #endif
252
+
253
+ static void
254
+ mrb_io_free(mrb_state *mrb, void *ptr)
255
+ {
256
+ struct mrb_io *io = (struct mrb_io *)ptr;
257
+ if (io != NULL) {
258
+ fptr_finalize(mrb, io, TRUE);
259
+ mrb_free(mrb, io);
260
+ }
261
+ }
262
+
263
+ static struct mrb_io *
264
+ mrb_io_alloc(mrb_state *mrb)
265
+ {
266
+ struct mrb_io *fptr;
267
+
268
+ fptr = (struct mrb_io *)mrb_malloc(mrb, sizeof(struct mrb_io));
269
+ fptr->fd = -1;
270
+ fptr->fd2 = -1;
271
+ fptr->pid = 0;
272
+ fptr->readable = 0;
273
+ fptr->writable = 0;
274
+ fptr->sync = 0;
275
+ fptr->is_socket = 0;
276
+ return fptr;
277
+ }
278
+
279
+ #ifndef NOFILE
280
+ #define NOFILE 64
281
+ #endif
282
+
283
+ static int
284
+ option_to_fd(mrb_state *mrb, mrb_value obj, const char *key)
285
+ {
286
+ mrb_value opt = mrb_funcall(mrb, obj, "[]", 1, mrb_symbol_value(mrb_intern_static(mrb, key, strlen(key))));
287
+ if (mrb_nil_p(opt)) {
288
+ return -1;
289
+ }
290
+
291
+ switch (mrb_type(opt)) {
292
+ case MRB_TT_DATA: /* IO */
293
+ return (int)mrb_fixnum(mrb_io_fileno(mrb, opt));
294
+ case MRB_TT_FIXNUM:
295
+ return (int)mrb_fixnum(opt);
296
+ default:
297
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong exec redirect action");
298
+ break;
299
+ }
300
+ return -1; /* never reached */
301
+ }
302
+
303
+ #ifndef _WIN32
304
+ mrb_value
305
+ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
306
+ {
307
+ mrb_value cmd, io, result;
308
+ mrb_value mode = mrb_str_new_cstr(mrb, "r");
309
+ mrb_value opt = mrb_hash_new(mrb);
310
+
311
+ struct mrb_io *fptr;
312
+ const char *pname;
313
+ int pid, flags, fd, write_fd = -1;
314
+ int pr[2] = { -1, -1 };
315
+ int pw[2] = { -1, -1 };
316
+ int doexec;
317
+ int saved_errno;
318
+ int opt_in, opt_out, opt_err;
319
+
320
+ mrb_get_args(mrb, "S|SH", &cmd, &mode, &opt);
321
+ io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
322
+
323
+ pname = mrb_string_value_cstr(mrb, &cmd);
324
+ flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
325
+
326
+ doexec = (strcmp("-", pname) != 0);
327
+ opt_in = option_to_fd(mrb, opt, "in");
328
+ opt_out = option_to_fd(mrb, opt, "out");
329
+ opt_err = option_to_fd(mrb, opt, "err");
330
+
331
+ if (flags & FMODE_READABLE) {
332
+ if (pipe(pr) == -1) {
333
+ mrb_sys_fail(mrb, "pipe");
334
+ }
335
+ mrb_fd_cloexec(mrb, pr[0]);
336
+ mrb_fd_cloexec(mrb, pr[1]);
337
+ }
338
+
339
+ if (flags & FMODE_WRITABLE) {
340
+ if (pipe(pw) == -1) {
341
+ if (pr[0] != -1) close(pr[0]);
342
+ if (pr[1] != -1) close(pr[1]);
343
+ mrb_sys_fail(mrb, "pipe");
344
+ }
345
+ mrb_fd_cloexec(mrb, pw[0]);
346
+ mrb_fd_cloexec(mrb, pw[1]);
347
+ }
348
+
349
+ if (!doexec) {
350
+ // XXX
351
+ fflush(stdin);
352
+ fflush(stdout);
353
+ fflush(stderr);
354
+ }
355
+
356
+ result = mrb_nil_value();
357
+ switch (pid = fork()) {
358
+ case 0: /* child */
359
+ if (opt_in != -1) {
360
+ dup2(opt_in, 0);
361
+ }
362
+ if (opt_out != -1) {
363
+ dup2(opt_out, 1);
364
+ }
365
+ if (opt_err != -1) {
366
+ dup2(opt_err, 2);
367
+ }
368
+ if (flags & FMODE_READABLE) {
369
+ close(pr[0]);
370
+ if (pr[1] != 1) {
371
+ dup2(pr[1], 1);
372
+ close(pr[1]);
373
+ }
374
+ }
375
+ if (flags & FMODE_WRITABLE) {
376
+ close(pw[1]);
377
+ if (pw[0] != 0) {
378
+ dup2(pw[0], 0);
379
+ close(pw[0]);
380
+ }
381
+ }
382
+ if (doexec) {
383
+ for (fd = 3; fd < NOFILE; fd++) {
384
+ close(fd);
385
+ }
386
+ mrb_proc_exec(pname);
387
+ mrb_raisef(mrb, E_IO_ERROR, "command not found: %S", cmd);
388
+ _exit(127);
389
+ }
390
+ result = mrb_nil_value();
391
+ break;
392
+
393
+ default: /* parent */
394
+ if ((flags & FMODE_READABLE) && (flags & FMODE_WRITABLE)) {
395
+ close(pr[1]);
396
+ fd = pr[0];
397
+ close(pw[0]);
398
+ write_fd = pw[1];
399
+ } else if (flags & FMODE_READABLE) {
400
+ close(pr[1]);
401
+ fd = pr[0];
402
+ } else {
403
+ close(pw[0]);
404
+ fd = pw[1];
405
+ }
406
+
407
+ mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
408
+
409
+ fptr = mrb_io_alloc(mrb);
410
+ fptr->fd = fd;
411
+ fptr->fd2 = write_fd;
412
+ fptr->pid = pid;
413
+ fptr->readable = ((flags & FMODE_READABLE) != 0);
414
+ fptr->writable = ((flags & FMODE_WRITABLE) != 0);
415
+ fptr->sync = 0;
416
+
417
+ DATA_TYPE(io) = &mrb_io_type;
418
+ DATA_PTR(io) = fptr;
419
+ result = io;
420
+ break;
421
+
422
+ case -1: /* error */
423
+ saved_errno = errno;
424
+ if (flags & FMODE_READABLE) {
425
+ close(pr[0]);
426
+ close(pr[1]);
427
+ }
428
+ if (flags & FMODE_WRITABLE) {
429
+ close(pw[0]);
430
+ close(pw[1]);
431
+ }
432
+ errno = saved_errno;
433
+ mrb_sys_fail(mrb, "pipe_open failed.");
434
+ break;
435
+ }
436
+ return result;
437
+ }
438
+ #else
439
+ mrb_value
440
+ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
441
+ {
442
+ mrb_value cmd, io;
443
+ mrb_value mode = mrb_str_new_cstr(mrb, "r");
444
+ mrb_value opt = mrb_hash_new(mrb);
445
+
446
+ struct mrb_io *fptr;
447
+ const char *pname;
448
+ int pid = 0, flags;
449
+ STARTUPINFO si;
450
+ PROCESS_INFORMATION pi;
451
+ SECURITY_ATTRIBUTES saAttr;
452
+
453
+ HANDLE ifd[2];
454
+ HANDLE ofd[2];
455
+
456
+ int doexec;
457
+ int opt_in, opt_out, opt_err;
458
+
459
+ ifd[0] = INVALID_HANDLE_VALUE;
460
+ ifd[1] = INVALID_HANDLE_VALUE;
461
+ ofd[0] = INVALID_HANDLE_VALUE;
462
+ ofd[1] = INVALID_HANDLE_VALUE;
463
+
464
+ mrb_get_args(mrb, "S|SH", &cmd, &mode, &opt);
465
+ io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
466
+
467
+ pname = mrb_string_value_cstr(mrb, &cmd);
468
+ flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
469
+
470
+ doexec = (strcmp("-", pname) != 0);
471
+ opt_in = option_to_fd(mrb, opt, "in");
472
+ opt_out = option_to_fd(mrb, opt, "out");
473
+ opt_err = option_to_fd(mrb, opt, "err");
474
+
475
+ saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
476
+ saAttr.bInheritHandle = TRUE;
477
+ saAttr.lpSecurityDescriptor = NULL;
478
+
479
+ if (flags & FMODE_READABLE) {
480
+ if (!CreatePipe(&ofd[0], &ofd[1], &saAttr, 0)
481
+ || !SetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0)) {
482
+ mrb_sys_fail(mrb, "pipe");
483
+ }
484
+ }
485
+
486
+ if (flags & FMODE_WRITABLE) {
487
+ if (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0)
488
+ || !SetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0)) {
489
+ mrb_sys_fail(mrb, "pipe");
490
+ }
491
+ }
492
+
493
+ if (doexec) {
494
+ ZeroMemory(&pi, sizeof(pi));
495
+ ZeroMemory(&si, sizeof(si));
496
+ si.cb = sizeof(si);
497
+ si.dwFlags |= STARTF_USESHOWWINDOW;
498
+ si.wShowWindow = SW_HIDE;
499
+ si.dwFlags |= STARTF_USESTDHANDLES;
500
+ if (flags & FMODE_READABLE) {
501
+ si.hStdOutput = ofd[1];
502
+ si.hStdError = ofd[1];
503
+ }
504
+ if (flags & FMODE_WRITABLE) {
505
+ si.hStdInput = ifd[0];
506
+ }
507
+ if (!CreateProcess(
508
+ NULL, (char*)pname, NULL, NULL,
509
+ TRUE, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &si, &pi)) {
510
+ CloseHandle(ifd[0]);
511
+ CloseHandle(ifd[1]);
512
+ CloseHandle(ofd[0]);
513
+ CloseHandle(ofd[1]);
514
+ mrb_raisef(mrb, E_IO_ERROR, "command not found: %S", cmd);
515
+ }
516
+ CloseHandle(pi.hThread);
517
+ CloseHandle(ifd[0]);
518
+ CloseHandle(ofd[1]);
519
+ pid = pi.dwProcessId;
520
+ }
521
+
522
+ mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
523
+
524
+ fptr = mrb_io_alloc(mrb);
525
+ fptr->fd = _open_osfhandle((intptr_t)ofd[0], 0);
526
+ fptr->fd2 = _open_osfhandle((intptr_t)ifd[1], 0);
527
+ fptr->pid = pid;
528
+ fptr->readable = ((flags & FMODE_READABLE) != 0);
529
+ fptr->writable = ((flags & FMODE_WRITABLE) != 0);
530
+ fptr->sync = 0;
531
+
532
+ DATA_TYPE(io) = &mrb_io_type;
533
+ DATA_PTR(io) = fptr;
534
+ return io;
535
+ }
536
+ #endif
537
+
538
+ static int
539
+ mrb_dup(mrb_state *mrb, int fd, mrb_bool *failed)
540
+ {
541
+ int new_fd;
542
+
543
+ *failed = FALSE;
544
+ if (fd < 0)
545
+ return fd;
546
+
547
+ new_fd = dup(fd);
548
+ if (new_fd == -1) *failed = TRUE;
549
+ return new_fd;
550
+ }
551
+
552
+ mrb_value
553
+ mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy)
554
+ {
555
+ mrb_value orig;
556
+ mrb_value buf;
557
+ struct mrb_io *fptr_copy;
558
+ struct mrb_io *fptr_orig;
559
+ mrb_bool failed = TRUE;
560
+
561
+ mrb_get_args(mrb, "o", &orig);
562
+ fptr_copy = (struct mrb_io *)DATA_PTR(copy);
563
+ if (fptr_copy != NULL) {
564
+ fptr_finalize(mrb, fptr_copy, FALSE);
565
+ mrb_free(mrb, fptr_copy);
566
+ }
567
+ fptr_copy = (struct mrb_io *)mrb_io_alloc(mrb);
568
+ fptr_orig = io_get_open_fptr(mrb, orig);
569
+
570
+ DATA_TYPE(copy) = &mrb_io_type;
571
+ DATA_PTR(copy) = fptr_copy;
572
+
573
+ buf = mrb_iv_get(mrb, orig, mrb_intern_cstr(mrb, "@buf"));
574
+ mrb_iv_set(mrb, copy, mrb_intern_cstr(mrb, "@buf"), buf);
575
+
576
+ fptr_copy->fd = mrb_dup(mrb, fptr_orig->fd, &failed);
577
+ if (failed) {
578
+ mrb_sys_fail(mrb, 0);
579
+ }
580
+ fptr_copy->fd2 = mrb_dup(mrb, fptr_orig->fd2, &failed);
581
+ if (failed) {
582
+ close(fptr_copy->fd);
583
+ mrb_sys_fail(mrb, 0);
584
+ }
585
+ fptr_copy->pid = fptr_orig->pid;
586
+ fptr_copy->readable = fptr_orig->readable;
587
+ fptr_copy->writable = fptr_orig->writable;
588
+ fptr_copy->sync = fptr_orig->sync;
589
+ fptr_copy->is_socket = fptr_orig->is_socket;
590
+
591
+ return copy;
592
+ }
593
+
594
+ mrb_value
595
+ mrb_io_initialize(mrb_state *mrb, mrb_value io)
596
+ {
597
+ struct mrb_io *fptr;
598
+ mrb_int fd;
599
+ mrb_value mode, opt;
600
+ int flags;
601
+
602
+ mode = opt = mrb_nil_value();
603
+
604
+ mrb_get_args(mrb, "i|So", &fd, &mode, &opt);
605
+ if (mrb_nil_p(mode)) {
606
+ mode = mrb_str_new_cstr(mrb, "r");
607
+ }
608
+ if (mrb_nil_p(opt)) {
609
+ opt = mrb_hash_new(mrb);
610
+ }
611
+
612
+ flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
613
+
614
+ mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
615
+
616
+ fptr = (struct mrb_io *)DATA_PTR(io);
617
+ if (fptr != NULL) {
618
+ fptr_finalize(mrb, fptr, TRUE);
619
+ mrb_free(mrb, fptr);
620
+ }
621
+ fptr = mrb_io_alloc(mrb);
622
+
623
+ DATA_TYPE(io) = &mrb_io_type;
624
+ DATA_PTR(io) = fptr;
625
+
626
+ fptr->fd = (int)fd;
627
+ fptr->readable = ((flags & FMODE_READABLE) != 0);
628
+ fptr->writable = ((flags & FMODE_WRITABLE) != 0);
629
+ fptr->sync = 0;
630
+ return io;
631
+ }
632
+
633
+ static void
634
+ fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet)
635
+ {
636
+ int saved_errno = 0;
637
+
638
+ if (fptr == NULL) {
639
+ return;
640
+ }
641
+
642
+ if (fptr->fd > 2) {
643
+ #ifdef _WIN32
644
+ if (fptr->is_socket) {
645
+ if (closesocket(fptr->fd) != 0) {
646
+ saved_errno = WSAGetLastError();
647
+ }
648
+ fptr->fd = -1;
649
+ }
650
+ #endif
651
+ if (fptr->fd != -1) {
652
+ if (close(fptr->fd) == -1) {
653
+ saved_errno = errno;
654
+ }
655
+ }
656
+ fptr->fd = -1;
657
+ }
658
+
659
+ if (fptr->fd2 > 2) {
660
+ if (close(fptr->fd2) == -1) {
661
+ if (saved_errno == 0) {
662
+ saved_errno = errno;
663
+ }
664
+ }
665
+ fptr->fd2 = -1;
666
+ }
667
+
668
+ if (fptr->pid != 0) {
669
+ #if !defined(_WIN32) && !defined(_WIN64)
670
+ pid_t pid;
671
+ int status;
672
+ do {
673
+ pid = waitpid(fptr->pid, &status, 0);
674
+ } while (pid == -1 && errno == EINTR);
675
+ if (!quiet && pid == fptr->pid) {
676
+ io_set_process_status(mrb, pid, status);
677
+ }
678
+ #else
679
+ HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, fptr->pid);
680
+ DWORD status;
681
+ if (WaitForSingleObject(h, INFINITE) && GetExitCodeProcess(h, &status))
682
+ if (!quiet)
683
+ io_set_process_status(mrb, fptr->pid, (int)status);
684
+ CloseHandle(h);
685
+ #endif
686
+ fptr->pid = 0;
687
+ /* Note: we don't raise an exception when waitpid(3) fails */
688
+ }
689
+
690
+ if (!quiet && saved_errno != 0) {
691
+ errno = saved_errno;
692
+ mrb_sys_fail(mrb, "fptr_finalize failed.");
693
+ }
694
+ }
695
+
696
+ mrb_value
697
+ mrb_io_check_readable(mrb_state *mrb, mrb_value self)
698
+ {
699
+ struct mrb_io *fptr = io_get_open_fptr(mrb, self);
700
+ if (! fptr->readable) {
701
+ mrb_raise(mrb, E_IO_ERROR, "not opened for reading");
702
+ }
703
+ return mrb_nil_value();
704
+ }
705
+
706
+ mrb_value
707
+ mrb_io_isatty(mrb_state *mrb, mrb_value self)
708
+ {
709
+ struct mrb_io *fptr;
710
+
711
+ fptr = io_get_open_fptr(mrb, self);
712
+ if (isatty(fptr->fd) == 0)
713
+ return mrb_false_value();
714
+ return mrb_true_value();
715
+ }
716
+
717
+ mrb_value
718
+ mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass)
719
+ {
720
+ struct RClass *c = mrb_class_ptr(klass);
721
+ enum mrb_vtype ttype = MRB_INSTANCE_TT(c);
722
+ mrb_value obj;
723
+
724
+ /* copied from mrb_instance_alloc() */
725
+ if (ttype == 0) ttype = MRB_TT_OBJECT;
726
+ obj = mrb_obj_value((struct RObject*)mrb_obj_alloc(mrb, ttype, c));
727
+ return mrb_io_initialize(mrb, obj);
728
+ }
729
+
730
+ mrb_value
731
+ mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass)
732
+ {
733
+ mrb_int fd;
734
+ mrb_get_args(mrb, "i", &fd);
735
+ if (close((int)fd) == -1) {
736
+ mrb_sys_fail(mrb, "close");
737
+ }
738
+ return mrb_fixnum_value(0);
739
+ }
740
+
741
+ int
742
+ mrb_cloexec_open(mrb_state *mrb, const char *pathname, mrb_int flags, mrb_int mode)
743
+ {
744
+ mrb_value emsg;
745
+ int fd, retry = FALSE;
746
+ char* fname = mrb_locale_from_utf8(pathname, -1);
747
+
748
+ #ifdef O_CLOEXEC
749
+ /* O_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */
750
+ flags |= O_CLOEXEC;
751
+ #elif defined O_NOINHERIT
752
+ flags |= O_NOINHERIT;
753
+ #endif
754
+ reopen:
755
+ fd = open(fname, (int)flags, (fmode_t)mode);
756
+ if (fd == -1) {
757
+ if (!retry) {
758
+ switch (errno) {
759
+ case ENFILE:
760
+ case EMFILE:
761
+ mrb_garbage_collect(mrb);
762
+ retry = TRUE;
763
+ goto reopen;
764
+ }
765
+ }
766
+
767
+ emsg = mrb_format(mrb, "open %S", mrb_str_new_cstr(mrb, pathname));
768
+ mrb_str_modify(mrb, mrb_str_ptr(emsg));
769
+ mrb_sys_fail(mrb, RSTRING_PTR(emsg));
770
+ }
771
+ mrb_utf8_free(fname);
772
+
773
+ if (fd <= 2) {
774
+ mrb_fd_cloexec(mrb, fd);
775
+ }
776
+ return fd;
777
+ }
778
+
779
+ mrb_value
780
+ mrb_io_s_sysopen(mrb_state *mrb, mrb_value klass)
781
+ {
782
+ mrb_value path = mrb_nil_value();
783
+ mrb_value mode = mrb_nil_value();
784
+ mrb_int fd, perm = -1;
785
+ const char *pat;
786
+ int flags, modenum;
787
+
788
+ mrb_get_args(mrb, "S|Si", &path, &mode, &perm);
789
+ if (mrb_nil_p(mode)) {
790
+ mode = mrb_str_new_cstr(mrb, "r");
791
+ }
792
+ if (perm < 0) {
793
+ perm = 0666;
794
+ }
795
+
796
+ pat = mrb_string_value_cstr(mrb, &path);
797
+ flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
798
+ modenum = mrb_io_flags_to_modenum(mrb, flags);
799
+ fd = mrb_cloexec_open(mrb, pat, modenum, perm);
800
+ return mrb_fixnum_value(fd);
801
+ }
802
+
803
+ mrb_value
804
+ mrb_io_sysread(mrb_state *mrb, mrb_value io)
805
+ {
806
+ struct mrb_io *fptr;
807
+ mrb_value buf = mrb_nil_value();
808
+ mrb_int maxlen;
809
+ int ret;
810
+
811
+ mrb_get_args(mrb, "i|S", &maxlen, &buf);
812
+ if (maxlen < 0) {
813
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "negative expanding string size");
814
+ }
815
+ else if (maxlen == 0) {
816
+ return mrb_str_new(mrb, NULL, maxlen);
817
+ }
818
+
819
+ if (mrb_nil_p(buf)) {
820
+ buf = mrb_str_new(mrb, NULL, maxlen);
821
+ }
822
+
823
+ if (RSTRING_LEN(buf) != maxlen) {
824
+ buf = mrb_str_resize(mrb, buf, maxlen);
825
+ } else {
826
+ mrb_str_modify(mrb, RSTRING(buf));
827
+ }
828
+
829
+ fptr = (struct mrb_io *)io_get_open_fptr(mrb, io);
830
+ if (!fptr->readable) {
831
+ mrb_raise(mrb, E_IO_ERROR, "not opened for reading");
832
+ }
833
+ ret = read(fptr->fd, RSTRING_PTR(buf), (fsize_t)maxlen);
834
+ switch (ret) {
835
+ case 0: /* EOF */
836
+ if (maxlen == 0) {
837
+ buf = mrb_str_new_cstr(mrb, "");
838
+ } else {
839
+ mrb_raise(mrb, E_EOF_ERROR, "sysread failed: End of File");
840
+ }
841
+ break;
842
+ case -1: /* Error */
843
+ mrb_sys_fail(mrb, "sysread failed");
844
+ break;
845
+ default:
846
+ if (RSTRING_LEN(buf) != ret) {
847
+ buf = mrb_str_resize(mrb, buf, ret);
848
+ }
849
+ break;
850
+ }
851
+
852
+ return buf;
853
+ }
854
+
855
+ mrb_value
856
+ mrb_io_sysseek(mrb_state *mrb, mrb_value io)
857
+ {
858
+ struct mrb_io *fptr;
859
+ off_t pos;
860
+ mrb_int offset, whence = -1;
861
+
862
+ mrb_get_args(mrb, "i|i", &offset, &whence);
863
+ if (whence < 0) {
864
+ whence = 0;
865
+ }
866
+
867
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, io, &mrb_io_type);
868
+ pos = lseek(fptr->fd, (off_t)offset, (int)whence);
869
+ if (pos == -1) {
870
+ mrb_sys_fail(mrb, "sysseek");
871
+ }
872
+ if (pos > MRB_INT_MAX) {
873
+ #ifndef MRB_WITHOUT_FLOAT
874
+ return mrb_float_value(mrb, (mrb_float)pos);
875
+ #else
876
+ mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for MRB_WITHOUT_FLOAT");
877
+ #endif
878
+ } else {
879
+ return mrb_fixnum_value(pos);
880
+ }
881
+ }
882
+
883
+ mrb_value
884
+ mrb_io_syswrite(mrb_state *mrb, mrb_value io)
885
+ {
886
+ struct mrb_io *fptr;
887
+ mrb_value str, buf;
888
+ int fd, length;
889
+
890
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, io, &mrb_io_type);
891
+ if (! fptr->writable) {
892
+ mrb_raise(mrb, E_IO_ERROR, "not opened for writing");
893
+ }
894
+
895
+ mrb_get_args(mrb, "S", &str);
896
+ if (mrb_type(str) != MRB_TT_STRING) {
897
+ buf = mrb_funcall(mrb, str, "to_s", 0);
898
+ } else {
899
+ buf = str;
900
+ }
901
+
902
+ if (fptr->fd2 == -1) {
903
+ fd = fptr->fd;
904
+ } else {
905
+ fd = fptr->fd2;
906
+ }
907
+ length = write(fd, RSTRING_PTR(buf), (fsize_t)RSTRING_LEN(buf));
908
+ if (length == -1) {
909
+ mrb_sys_fail(mrb, 0);
910
+ }
911
+
912
+ return mrb_fixnum_value(length);
913
+ }
914
+
915
+ mrb_value
916
+ mrb_io_close(mrb_state *mrb, mrb_value self)
917
+ {
918
+ struct mrb_io *fptr;
919
+ fptr = io_get_open_fptr(mrb, self);
920
+ fptr_finalize(mrb, fptr, FALSE);
921
+ return mrb_nil_value();
922
+ }
923
+
924
+ mrb_value
925
+ mrb_io_close_write(mrb_state *mrb, mrb_value self)
926
+ {
927
+ struct mrb_io *fptr;
928
+ fptr = io_get_open_fptr(mrb, self);
929
+ if (close((int)fptr->fd2) == -1) {
930
+ mrb_sys_fail(mrb, "close");
931
+ }
932
+ return mrb_nil_value();
933
+ }
934
+
935
+ mrb_value
936
+ mrb_io_closed(mrb_state *mrb, mrb_value io)
937
+ {
938
+ struct mrb_io *fptr;
939
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, io, &mrb_io_type);
940
+ if (fptr->fd >= 0) {
941
+ return mrb_false_value();
942
+ }
943
+
944
+ return mrb_true_value();
945
+ }
946
+
947
+ mrb_value
948
+ mrb_io_pid(mrb_state *mrb, mrb_value io)
949
+ {
950
+ struct mrb_io *fptr;
951
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, io, &mrb_io_type);
952
+
953
+ if (fptr->pid > 0) {
954
+ return mrb_fixnum_value(fptr->pid);
955
+ }
956
+
957
+ return mrb_nil_value();
958
+ }
959
+
960
+ static struct timeval
961
+ time2timeval(mrb_state *mrb, mrb_value time)
962
+ {
963
+ struct timeval t = { 0, 0 };
964
+
965
+ switch (mrb_type(time)) {
966
+ case MRB_TT_FIXNUM:
967
+ t.tv_sec = (ftime_t)mrb_fixnum(time);
968
+ t.tv_usec = 0;
969
+ break;
970
+
971
+ #ifndef MRB_WITHOUT_FLOAT
972
+ case MRB_TT_FLOAT:
973
+ t.tv_sec = (ftime_t)mrb_float(time);
974
+ t.tv_usec = (fsuseconds_t)((mrb_float(time) - t.tv_sec) * 1000000.0);
975
+ break;
976
+ #endif
977
+
978
+ default:
979
+ mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
980
+ }
981
+
982
+ return t;
983
+ }
984
+
985
+ static int
986
+ mrb_io_read_data_pending(mrb_state *mrb, mrb_value io)
987
+ {
988
+ mrb_value buf = mrb_iv_get(mrb, io, mrb_intern_cstr(mrb, "@buf"));
989
+ if (mrb_type(buf) == MRB_TT_STRING && RSTRING_LEN(buf) > 0) {
990
+ return 1;
991
+ }
992
+ return 0;
993
+ }
994
+
995
+ #ifndef _WIN32
996
+ static mrb_value
997
+ mrb_io_s_pipe(mrb_state *mrb, mrb_value klass)
998
+ {
999
+ mrb_value r = mrb_nil_value();
1000
+ mrb_value w = mrb_nil_value();
1001
+ struct mrb_io *fptr_r;
1002
+ struct mrb_io *fptr_w;
1003
+ int pipes[2];
1004
+
1005
+ if (mrb_pipe(mrb, pipes) == -1) {
1006
+ mrb_sys_fail(mrb, "pipe");
1007
+ }
1008
+
1009
+ r = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
1010
+ mrb_iv_set(mrb, r, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
1011
+ fptr_r = mrb_io_alloc(mrb);
1012
+ fptr_r->fd = pipes[0];
1013
+ fptr_r->readable = 1;
1014
+ fptr_r->writable = 0;
1015
+ fptr_r->sync = 0;
1016
+ DATA_TYPE(r) = &mrb_io_type;
1017
+ DATA_PTR(r) = fptr_r;
1018
+
1019
+ w = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
1020
+ mrb_iv_set(mrb, w, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
1021
+ fptr_w = mrb_io_alloc(mrb);
1022
+ fptr_w->fd = pipes[1];
1023
+ fptr_w->readable = 0;
1024
+ fptr_w->writable = 1;
1025
+ fptr_w->sync = 1;
1026
+ DATA_TYPE(w) = &mrb_io_type;
1027
+ DATA_PTR(w) = fptr_w;
1028
+
1029
+ return mrb_assoc_new(mrb, r, w);
1030
+ }
1031
+ #endif
1032
+
1033
+ static mrb_value
1034
+ mrb_io_s_select(mrb_state *mrb, mrb_value klass)
1035
+ {
1036
+ mrb_value *argv;
1037
+ mrb_int argc;
1038
+ mrb_value read, read_io, write, except, timeout, list;
1039
+ struct timeval *tp, timerec;
1040
+ fd_set pset, rset, wset, eset;
1041
+ fd_set *rp, *wp, *ep;
1042
+ struct mrb_io *fptr;
1043
+ int pending = 0;
1044
+ mrb_value result;
1045
+ int max = 0;
1046
+ int interrupt_flag = 0;
1047
+ int i, n;
1048
+
1049
+ mrb_get_args(mrb, "*", &argv, &argc);
1050
+
1051
+ if (argc < 1 || argc > 4) {
1052
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (%S for 1..4)", mrb_fixnum_value(argc));
1053
+ }
1054
+
1055
+ timeout = mrb_nil_value();
1056
+ except = mrb_nil_value();
1057
+ write = mrb_nil_value();
1058
+ if (argc > 3)
1059
+ timeout = argv[3];
1060
+ if (argc > 2)
1061
+ except = argv[2];
1062
+ if (argc > 1)
1063
+ write = argv[1];
1064
+ read = argv[0];
1065
+
1066
+ if (mrb_nil_p(timeout)) {
1067
+ tp = NULL;
1068
+ } else {
1069
+ timerec = time2timeval(mrb, timeout);
1070
+ tp = &timerec;
1071
+ }
1072
+
1073
+ FD_ZERO(&pset);
1074
+ if (!mrb_nil_p(read)) {
1075
+ mrb_check_type(mrb, read, MRB_TT_ARRAY);
1076
+ rp = &rset;
1077
+ FD_ZERO(rp);
1078
+ for (i = 0; i < RARRAY_LEN(read); i++) {
1079
+ read_io = RARRAY_PTR(read)[i];
1080
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, read_io, &mrb_io_type);
1081
+ FD_SET(fptr->fd, rp);
1082
+ if (mrb_io_read_data_pending(mrb, read_io)) {
1083
+ pending++;
1084
+ FD_SET(fptr->fd, &pset);
1085
+ }
1086
+ if (max < fptr->fd)
1087
+ max = fptr->fd;
1088
+ }
1089
+ if (pending) {
1090
+ timerec.tv_sec = timerec.tv_usec = 0;
1091
+ tp = &timerec;
1092
+ }
1093
+ } else {
1094
+ rp = NULL;
1095
+ }
1096
+
1097
+ if (!mrb_nil_p(write)) {
1098
+ mrb_check_type(mrb, write, MRB_TT_ARRAY);
1099
+ wp = &wset;
1100
+ FD_ZERO(wp);
1101
+ for (i = 0; i < RARRAY_LEN(write); i++) {
1102
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, RARRAY_PTR(write)[i], &mrb_io_type);
1103
+ FD_SET(fptr->fd, wp);
1104
+ if (max < fptr->fd)
1105
+ max = fptr->fd;
1106
+ if (fptr->fd2 >= 0) {
1107
+ FD_SET(fptr->fd2, wp);
1108
+ if (max < fptr->fd2)
1109
+ max = fptr->fd2;
1110
+ }
1111
+ }
1112
+ } else {
1113
+ wp = NULL;
1114
+ }
1115
+
1116
+ if (!mrb_nil_p(except)) {
1117
+ mrb_check_type(mrb, except, MRB_TT_ARRAY);
1118
+ ep = &eset;
1119
+ FD_ZERO(ep);
1120
+ for (i = 0; i < RARRAY_LEN(except); i++) {
1121
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, RARRAY_PTR(except)[i], &mrb_io_type);
1122
+ FD_SET(fptr->fd, ep);
1123
+ if (max < fptr->fd)
1124
+ max = fptr->fd;
1125
+ if (fptr->fd2 >= 0) {
1126
+ FD_SET(fptr->fd2, ep);
1127
+ if (max < fptr->fd2)
1128
+ max = fptr->fd2;
1129
+ }
1130
+ }
1131
+ } else {
1132
+ ep = NULL;
1133
+ }
1134
+
1135
+ max++;
1136
+
1137
+ retry:
1138
+ n = select(max, rp, wp, ep, tp);
1139
+ if (n < 0) {
1140
+ if (errno != EINTR)
1141
+ mrb_sys_fail(mrb, "select failed");
1142
+ if (tp == NULL)
1143
+ goto retry;
1144
+ interrupt_flag = 1;
1145
+ }
1146
+
1147
+ if (!pending && n == 0)
1148
+ return mrb_nil_value();
1149
+
1150
+ result = mrb_ary_new_capa(mrb, 3);
1151
+ mrb_ary_push(mrb, result, rp? mrb_ary_new(mrb) : mrb_ary_new_capa(mrb, 0));
1152
+ mrb_ary_push(mrb, result, wp? mrb_ary_new(mrb) : mrb_ary_new_capa(mrb, 0));
1153
+ mrb_ary_push(mrb, result, ep? mrb_ary_new(mrb) : mrb_ary_new_capa(mrb, 0));
1154
+
1155
+ if (interrupt_flag == 0) {
1156
+ if (rp) {
1157
+ list = RARRAY_PTR(result)[0];
1158
+ for (i = 0; i < RARRAY_LEN(read); i++) {
1159
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, RARRAY_PTR(read)[i], &mrb_io_type);
1160
+ if (FD_ISSET(fptr->fd, rp) ||
1161
+ FD_ISSET(fptr->fd, &pset)) {
1162
+ mrb_ary_push(mrb, list, RARRAY_PTR(read)[i]);
1163
+ }
1164
+ }
1165
+ }
1166
+
1167
+ if (wp) {
1168
+ list = RARRAY_PTR(result)[1];
1169
+ for (i = 0; i < RARRAY_LEN(write); i++) {
1170
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, RARRAY_PTR(write)[i], &mrb_io_type);
1171
+ if (FD_ISSET(fptr->fd, wp)) {
1172
+ mrb_ary_push(mrb, list, RARRAY_PTR(write)[i]);
1173
+ } else if (fptr->fd2 >= 0 && FD_ISSET(fptr->fd2, wp)) {
1174
+ mrb_ary_push(mrb, list, RARRAY_PTR(write)[i]);
1175
+ }
1176
+ }
1177
+ }
1178
+
1179
+ if (ep) {
1180
+ list = RARRAY_PTR(result)[2];
1181
+ for (i = 0; i < RARRAY_LEN(except); i++) {
1182
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, RARRAY_PTR(except)[i], &mrb_io_type);
1183
+ if (FD_ISSET(fptr->fd, ep)) {
1184
+ mrb_ary_push(mrb, list, RARRAY_PTR(except)[i]);
1185
+ } else if (fptr->fd2 >= 0 && FD_ISSET(fptr->fd2, ep)) {
1186
+ mrb_ary_push(mrb, list, RARRAY_PTR(except)[i]);
1187
+ }
1188
+ }
1189
+ }
1190
+ }
1191
+
1192
+ return result;
1193
+ }
1194
+
1195
+ mrb_value
1196
+ mrb_io_fileno(mrb_state *mrb, mrb_value io)
1197
+ {
1198
+ struct mrb_io *fptr;
1199
+ fptr = (struct mrb_io *)mrb_get_datatype(mrb, io, &mrb_io_type);
1200
+ return mrb_fixnum_value(fptr->fd);
1201
+ }
1202
+
1203
+ mrb_value
1204
+ mrb_io_close_on_exec_p(mrb_state *mrb, mrb_value self)
1205
+ {
1206
+ #if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
1207
+ struct mrb_io *fptr;
1208
+ int ret;
1209
+
1210
+ fptr = io_get_open_fptr(mrb, self);
1211
+
1212
+ if (fptr->fd2 >= 0) {
1213
+ if ((ret = fcntl(fptr->fd2, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
1214
+ if (!(ret & FD_CLOEXEC)) return mrb_false_value();
1215
+ }
1216
+
1217
+ if ((ret = fcntl(fptr->fd, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
1218
+ if (!(ret & FD_CLOEXEC)) return mrb_false_value();
1219
+ return mrb_true_value();
1220
+
1221
+ #else
1222
+ mrb_raise(mrb, E_NOTIMP_ERROR, "IO#close_on_exec? is not supported on the platform");
1223
+ return mrb_false_value();
1224
+ #endif
1225
+ }
1226
+
1227
+ mrb_value
1228
+ mrb_io_set_close_on_exec(mrb_state *mrb, mrb_value self)
1229
+ {
1230
+ #if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
1231
+ struct mrb_io *fptr;
1232
+ int flag, ret;
1233
+ mrb_bool b;
1234
+
1235
+ fptr = io_get_open_fptr(mrb, self);
1236
+ mrb_get_args(mrb, "b", &b);
1237
+ flag = b ? FD_CLOEXEC : 0;
1238
+
1239
+ if (fptr->fd2 >= 0) {
1240
+ if ((ret = fcntl(fptr->fd2, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
1241
+ if ((ret & FD_CLOEXEC) != flag) {
1242
+ ret = (ret & ~FD_CLOEXEC) | flag;
1243
+ ret = fcntl(fptr->fd2, F_SETFD, ret);
1244
+
1245
+ if (ret == -1) mrb_sys_fail(mrb, "F_SETFD failed");
1246
+ }
1247
+ }
1248
+
1249
+ if ((ret = fcntl(fptr->fd, F_GETFD)) == -1) mrb_sys_fail(mrb, "F_GETFD failed");
1250
+ if ((ret & FD_CLOEXEC) != flag) {
1251
+ ret = (ret & ~FD_CLOEXEC) | flag;
1252
+ ret = fcntl(fptr->fd, F_SETFD, ret);
1253
+ if (ret == -1) mrb_sys_fail(mrb, "F_SETFD failed");
1254
+ }
1255
+
1256
+ return mrb_bool_value(b);
1257
+ #else
1258
+ mrb_raise(mrb, E_NOTIMP_ERROR, "IO#close_on_exec= is not supported on the platform");
1259
+ return mrb_nil_value();
1260
+ #endif
1261
+ }
1262
+
1263
+ mrb_value
1264
+ mrb_io_set_sync(mrb_state *mrb, mrb_value self)
1265
+ {
1266
+ struct mrb_io *fptr;
1267
+ mrb_bool b;
1268
+
1269
+ fptr = io_get_open_fptr(mrb, self);
1270
+ mrb_get_args(mrb, "b", &b);
1271
+ fptr->sync = b;
1272
+ return mrb_bool_value(b);
1273
+ }
1274
+
1275
+ mrb_value
1276
+ mrb_io_sync(mrb_state *mrb, mrb_value self)
1277
+ {
1278
+ struct mrb_io *fptr;
1279
+ fptr = io_get_open_fptr(mrb, self);
1280
+ return mrb_bool_value(fptr->sync);
1281
+ }
1282
+
1283
+ void
1284
+ mrb_init_io(mrb_state *mrb)
1285
+ {
1286
+ struct RClass *io;
1287
+
1288
+ io = mrb_define_class(mrb, "IO", mrb->object_class);
1289
+ MRB_SET_INSTANCE_TT(io, MRB_TT_DATA);
1290
+
1291
+ mrb_include_module(mrb, io, mrb_module_get(mrb, "Enumerable")); /* 15.2.20.3 */
1292
+ mrb_define_class_method(mrb, io, "_popen", mrb_io_s_popen, MRB_ARGS_ANY());
1293
+ mrb_define_class_method(mrb, io, "_sysclose", mrb_io_s_sysclose, MRB_ARGS_REQ(1));
1294
+ mrb_define_class_method(mrb, io, "for_fd", mrb_io_s_for_fd, MRB_ARGS_ANY());
1295
+ mrb_define_class_method(mrb, io, "select", mrb_io_s_select, MRB_ARGS_ANY());
1296
+ mrb_define_class_method(mrb, io, "sysopen", mrb_io_s_sysopen, MRB_ARGS_ANY());
1297
+ #ifndef _WIN32
1298
+ mrb_define_class_method(mrb, io, "_pipe", mrb_io_s_pipe, MRB_ARGS_NONE());
1299
+ #endif
1300
+
1301
+ mrb_define_method(mrb, io, "initialize", mrb_io_initialize, MRB_ARGS_ANY()); /* 15.2.20.5.21 (x)*/
1302
+ mrb_define_method(mrb, io, "initialize_copy", mrb_io_initialize_copy, MRB_ARGS_REQ(1));
1303
+ mrb_define_method(mrb, io, "_check_readable", mrb_io_check_readable, MRB_ARGS_NONE());
1304
+ mrb_define_method(mrb, io, "isatty", mrb_io_isatty, MRB_ARGS_NONE());
1305
+ mrb_define_method(mrb, io, "sync", mrb_io_sync, MRB_ARGS_NONE());
1306
+ mrb_define_method(mrb, io, "sync=", mrb_io_set_sync, MRB_ARGS_REQ(1));
1307
+ mrb_define_method(mrb, io, "sysread", mrb_io_sysread, MRB_ARGS_ANY());
1308
+ mrb_define_method(mrb, io, "sysseek", mrb_io_sysseek, MRB_ARGS_REQ(1));
1309
+ mrb_define_method(mrb, io, "syswrite", mrb_io_syswrite, MRB_ARGS_REQ(1));
1310
+ mrb_define_method(mrb, io, "close", mrb_io_close, MRB_ARGS_NONE()); /* 15.2.20.5.1 */
1311
+ mrb_define_method(mrb, io, "close_write", mrb_io_close_write, MRB_ARGS_NONE());
1312
+ mrb_define_method(mrb, io, "close_on_exec=", mrb_io_set_close_on_exec, MRB_ARGS_REQ(1));
1313
+ mrb_define_method(mrb, io, "close_on_exec?", mrb_io_close_on_exec_p, MRB_ARGS_NONE());
1314
+ mrb_define_method(mrb, io, "closed?", mrb_io_closed, MRB_ARGS_NONE()); /* 15.2.20.5.2 */
1315
+ mrb_define_method(mrb, io, "pid", mrb_io_pid, MRB_ARGS_NONE()); /* 15.2.20.5.2 */
1316
+ mrb_define_method(mrb, io, "fileno", mrb_io_fileno, MRB_ARGS_NONE());
1317
+
1318
+
1319
+ mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$/"), mrb_str_new_cstr(mrb, "\n"));
1320
+ }