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,91 @@
1
+ assert('Addrinfo') do
2
+ assert_equal(Class, Addrinfo.class)
3
+ end
4
+
5
+ assert('super class of Addrinfo') do
6
+ assert_equal(Object, Addrinfo.superclass)
7
+ end
8
+
9
+ assert('Addrinfo.getaddrinfo') do
10
+ ary = Addrinfo.getaddrinfo("localhost", "domain", Socket::AF_INET, Socket::SOCK_STREAM)
11
+ assert_true(ary.size >= 1)
12
+ ai = ary[0]
13
+ assert_equal(ai.afamily, Socket::AF_INET)
14
+ assert_equal(ai.pfamily, Socket::PF_INET)
15
+ assert_equal(ai.socktype, Socket::SOCK_STREAM)
16
+ assert_equal(ai.ip_address, '127.0.0.1')
17
+ assert_equal(ai.ip_port, 53)
18
+ end
19
+
20
+ assert('Addrinfo.foreach') do
21
+ # assume Addrinfo.getaddrinfo works well
22
+ a = Addrinfo.getaddrinfo("localhost", "domain")
23
+ b = []
24
+ Addrinfo.foreach("localhost", "domain") { |ai| b << ai }
25
+ assert_equal(a.size, b.size)
26
+ end
27
+
28
+ assert('Addrinfo.ip') do
29
+ ai = Addrinfo.ip('127.0.0.1')
30
+ assert_equal('127.0.0.1', ai.ip_address)
31
+ assert_equal(Socket::AF_INET, ai.afamily)
32
+ assert_equal(0, ai.ip_port)
33
+ assert_equal(0, ai.socktype)
34
+ assert_equal(0, ai.protocol)
35
+ end
36
+
37
+ assert('Addrinfo.tcp') do
38
+ ai = Addrinfo.tcp('127.0.0.1', 'smtp')
39
+ assert_equal('127.0.0.1', ai.ip_address)
40
+ assert_equal(Socket::AF_INET, ai.afamily)
41
+ assert_equal(25, ai.ip_port)
42
+ assert_equal(Socket::SOCK_STREAM, ai.socktype)
43
+ assert_equal(Socket::IPPROTO_TCP, ai.protocol)
44
+ end
45
+
46
+ assert('Addrinfo.udp') do
47
+ ai = Addrinfo.udp('127.0.0.1', 'domain')
48
+ assert_equal('127.0.0.1', ai.ip_address)
49
+ assert_equal(Socket::AF_INET, ai.afamily)
50
+ assert_equal(53, ai.ip_port)
51
+ assert_equal(Socket::SOCK_DGRAM, ai.socktype)
52
+ assert_equal(Socket::IPPROTO_UDP, ai.protocol)
53
+ end
54
+
55
+ assert('Addrinfo.unix') do
56
+ skip "unix is not supported on Windows" if SocketTest.win?
57
+ a1 = Addrinfo.unix('/tmp/sock')
58
+ assert_true(a1.unix?)
59
+ assert_equal('/tmp/sock', a1.unix_path)
60
+ assert_equal(Socket::SOCK_STREAM, a1.socktype)
61
+ a2 = Addrinfo.unix('/tmp/sock', Socket::SOCK_DGRAM)
62
+ assert_equal(Socket::SOCK_DGRAM, a2.socktype)
63
+ end
64
+
65
+ assert('Addrinfo#afamily') do
66
+ skip "afamily is not supported on Windows" if SocketTest.win?
67
+ ai4 = Addrinfo.new(Socket.sockaddr_in(1, '127.0.0.1'))
68
+ ai6 = Addrinfo.new(Socket.sockaddr_in(1, '::1'))
69
+ aiu = Addrinfo.new(Socket.sockaddr_un('/tmp/sock'))
70
+ assert_equal(Socket::AF_INET, ai4.afamily)
71
+ assert_equal(Socket::AF_INET6, ai6.afamily)
72
+ assert_equal(Socket::AF_UNIX, aiu.afamily)
73
+ end
74
+
75
+ # assert('Addrinfo#canonname') do
76
+
77
+ # #getnameinfo
78
+ # assert('Addrinfo#inspect') do
79
+ # assert('Addrinfo#inspect_socket') do
80
+ # assert('Addrinfo#ip?') do
81
+ # assert('Addrinfo#ip_address') do
82
+ # assert('Addrinfo#ip_port') do
83
+ # assert('Addrinfo#ip_unpack') do
84
+ # assert('Addrinfo#ipv4?') do
85
+ # assert('Addrinfo#ipv6?') do
86
+ # assert('Addrinfo#pfamily') do
87
+ # assert('Addrinfo#protocol') do
88
+ # assert('Addrinfo#socktype') do
89
+ # assert('Addrinfo#to_sockaddr') do
90
+ # assert('Addrinfo#unix?') do
91
+ # #unix_path
@@ -0,0 +1,17 @@
1
+ assert('BasicSocket') do
2
+ assert_equal(Class, BasicSocket.class)
3
+ end
4
+
5
+ assert('super class of BasicSocket') do
6
+ assert_equal(IO, BasicSocket.superclass)
7
+ end
8
+
9
+ assert('BasicSocket.do_not_reverse_lookup') do
10
+ assert_equal(BasicSocket.do_not_reverse_lookup, true)
11
+ end
12
+
13
+ assert('BasicSocket.do_not_reverse_lookup=') do
14
+ BasicSocket.do_not_reverse_lookup = false
15
+ assert_equal(BasicSocket.do_not_reverse_lookup, false)
16
+ BasicSocket.do_not_reverse_lookup = true
17
+ end
@@ -0,0 +1,44 @@
1
+ unless SocketTest.win?
2
+
3
+ # Note: most of tests below will fail if UDPSocket is broken.
4
+
5
+ assert('IPSocket.getaddress') do
6
+ l = IPSocket.getaddress("localhost")
7
+ assert_true (l == "127.0.0.1" or l == "::1")
8
+ end
9
+
10
+ assert('IPSocket.addr') do
11
+ localhost = "127.0.0.1"
12
+ s = UDPSocket.new
13
+ s.bind(localhost, 0)
14
+ port = Addrinfo.new(s.getsockname).ip_port
15
+
16
+ a = s.addr
17
+ assert_equal "AF_INET", a[0]
18
+ assert_equal port, a[1]
19
+ assert_equal localhost, a[2]
20
+ assert_equal localhost, a[3]
21
+ s.close
22
+ true
23
+ end
24
+
25
+ assert('IPSocket.peeraddr') do
26
+ localhost = "127.0.0.1"
27
+ server = UDPSocket.new
28
+ server.bind(localhost, 0)
29
+ port = server.local_address.ip_port
30
+
31
+ client = UDPSocket.new
32
+ client.connect(localhost, port)
33
+
34
+ a = client.peeraddr
35
+ assert_equal "AF_INET", a[0]
36
+ assert_equal port, a[1]
37
+ assert_equal localhost, a[2]
38
+ assert_equal localhost, a[3]
39
+ client.close
40
+ server.close
41
+ true
42
+ end
43
+
44
+ end # win?
@@ -0,0 +1,38 @@
1
+ unless SocketTest.win?
2
+
3
+ assert('Socket.gethostname') do
4
+ assert_true(Socket.gethostname.is_a? String)
5
+ end
6
+
7
+ assert('Socket::getaddrinfo') do
8
+ ret = Socket.getaddrinfo("localhost", "domain", Socket::AF_INET, Socket::SOCK_DGRAM)
9
+ assert_true ret.size >= 1
10
+ a = ret[0]
11
+ assert_equal "AF_INET", a[0]
12
+ assert_equal 53, a[1]
13
+ # documents says it's a hostname but CRuby returns an address
14
+ #assert_equal "127.0.0.1", a[2]
15
+ assert_equal "127.0.0.1", a[3]
16
+ assert_equal Socket::AF_INET, a[4]
17
+ assert_equal Socket::SOCK_DGRAM, a[5]
18
+ assert_equal Socket::IPPROTO_UDP, a[6] unless SocketTest.cygwin?
19
+ end
20
+
21
+ assert('Socket#recvfrom') do
22
+ begin
23
+ sstr = "abcdefg"
24
+ s = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
25
+ c = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
26
+ s.bind(Socket.sockaddr_in(0, "127.0.0.1"))
27
+ c.send sstr, 0, s.getsockname
28
+ rstr, ai = s.recvfrom sstr.size
29
+
30
+ assert_equal sstr, rstr
31
+ assert_true "127.0.0.1", ai.ip_address
32
+ ensure
33
+ s.close rescue nil
34
+ c.close rescue nil
35
+ end
36
+ end
37
+
38
+ end # win?
@@ -0,0 +1,46 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+
4
+ #include "mruby.h"
5
+
6
+ #ifdef _WIN32
7
+ #define tempnam _tempnam
8
+ #endif
9
+
10
+ mrb_value
11
+ mrb_sockettest_tmppath(mrb_state *mrb, mrb_value klass)
12
+ {
13
+ char *tmp = tempnam(NULL, "mruby-socket");
14
+ mrb_value str = mrb_str_new_cstr(mrb, tmp);
15
+ free(tmp);
16
+ return str;
17
+ }
18
+
19
+ mrb_value
20
+ mrb_sockettest_win_p(mrb_state *mrb, mrb_value klass)
21
+ {
22
+ #ifdef _WIN32
23
+ return mrb_true_value();
24
+ #else
25
+ return mrb_false_value();
26
+ #endif
27
+ }
28
+
29
+ mrb_value
30
+ mrb_sockettest_cygwin_p(mrb_state *mrb, mrb_value klass)
31
+ {
32
+ #if defined(__CYGWIN__) || defined(__CYGWIN32__)
33
+ return mrb_true_value();
34
+ #else
35
+ return mrb_false_value();
36
+ #endif
37
+ }
38
+
39
+ void
40
+ mrb_mruby_socket_gem_test(mrb_state* mrb)
41
+ {
42
+ struct RClass *c = mrb_define_module(mrb, "SocketTest");
43
+ mrb_define_class_method(mrb, c, "tmppath", mrb_sockettest_tmppath, MRB_ARGS_NONE());
44
+ mrb_define_class_method(mrb, c, "win?", mrb_sockettest_win_p, MRB_ARGS_NONE());
45
+ mrb_define_class_method(mrb, c, "cygwin?", mrb_sockettest_cygwin_p, MRB_ARGS_NONE());
46
+ }
@@ -0,0 +1,4 @@
1
+ #assert('TCPSocket.gethostbyname') do
2
+ #assert('TCPSocket.new') do
3
+ #assert('TCPSocket#close') do
4
+ #assert('TCPSocket#write') do
@@ -0,0 +1,16 @@
1
+ assert('UDPSocket.new') do
2
+ s = UDPSocket.new
3
+ assert_true(s.is_a? UDPSocket)
4
+ s.close
5
+ s = UDPSocket.new(Socket::AF_INET6)
6
+ assert_true(s.is_a? UDPSocket)
7
+ s.close
8
+ true
9
+ end
10
+
11
+ #assert('UDPSocket#connect') do
12
+ #assert('UDPSocket#send') do
13
+ #assert('UDPSocket#recv') do
14
+
15
+ #assert('UDPSocket#bind') do
16
+ #assert('UDPSocket#recvfrom_nonblock') do
@@ -0,0 +1,130 @@
1
+ unless SocketTest.win? || SocketTest.cygwin?
2
+
3
+ def unixserver_test_block
4
+ path = SocketTest.tmppath
5
+ File.unlink path rescue nil
6
+ begin
7
+ result = yield path
8
+ ensure
9
+ File.unlink path rescue nil
10
+ end
11
+ result
12
+ end
13
+
14
+ def with_unix_server
15
+ unixserver_test_block do |path|
16
+ UNIXServer.open(path) { |server|
17
+ yield path, server
18
+ }
19
+ end
20
+ end
21
+
22
+ def with_unix_client
23
+ with_unix_server do |path, server|
24
+ UNIXSocket.open(path) do |csock|
25
+ ssock = server.accept
26
+ begin
27
+ yield path, server, ssock, csock
28
+ ensure
29
+ ssock.close unless ssock.closed? rescue nil
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ assert('UNIXServer.new') do
36
+ unixserver_test_block do |path|
37
+ server = UNIXServer.new(path)
38
+ assert_true server.is_a? UNIXServer
39
+ server.close
40
+ File.unlink path
41
+
42
+ s2 = nil
43
+ result = UNIXServer.open(path) { |s1|
44
+ assert_true s1.is_a? UNIXServer
45
+ s2 = s1
46
+ 1234
47
+ }
48
+ assert_equal 1234, result
49
+ assert_true s2.is_a? UNIXServer
50
+ assert_true s2.closed?
51
+ end
52
+ end
53
+
54
+ # assert('UNIXServer#accept_nonblock') - would block if fails
55
+
56
+ assert('UNIXServer#addr') do
57
+ with_unix_server do |path, server|
58
+ assert_equal [ "AF_UNIX", path], server.addr
59
+ end
60
+ end
61
+
62
+ assert('UNIXServer#path') do
63
+ with_unix_server do |path, server|
64
+ assert_equal path, server.path
65
+ end
66
+ end
67
+
68
+ # assert('UNIXServer#peeraddr') - will raise a runtime exception
69
+
70
+ assert('UNIXServer#listen') do
71
+ with_unix_server do |path, server|
72
+ assert_equal 0, server.listen(1)
73
+ end
74
+ end
75
+
76
+ assert('UNIXServer#sysaccept') do
77
+ with_unix_server do |path, server|
78
+ UNIXSocket.open(path) do |csock|
79
+ begin
80
+ fd = server.sysaccept
81
+ assert_true fd.kind_of? Integer
82
+ ensure
83
+ IO._sysclose(fd) rescue nil
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ assert('UNIXSocket.new') do
90
+ with_unix_server do |path, server|
91
+ c = UNIXSocket.new(path)
92
+ assert_true c.is_a? UNIXSocket
93
+ c.close
94
+ true
95
+ end
96
+ end
97
+
98
+ assert('UNIXSocket#addr') do
99
+ with_unix_client do |path, server, ssock, csock|
100
+ assert_equal [ "AF_UNIX", path ], ssock.addr
101
+ assert_equal [ "AF_UNIX", "" ], csock.addr
102
+ end
103
+ end
104
+
105
+ assert('UNIXSocket#path') do
106
+ with_unix_client do |path, server, ssock, csock|
107
+ assert_equal path, ssock.path
108
+ assert_equal "", csock.path
109
+ end
110
+ end
111
+
112
+ assert('UNIXSocket#peeraddr') do
113
+ with_unix_client do |path, server, ssock, csock|
114
+ assert_equal [ "AF_UNIX", "" ], ssock.peeraddr
115
+ assert_equal [ "AF_UNIX", path ], csock.peeraddr
116
+ end
117
+ end
118
+
119
+ assert('UNIXSocket#recvfrom') do
120
+ with_unix_client do |path, server, ssock, csock|
121
+ str = "0123456789"
122
+ ssock.send str, 0
123
+ a = csock.recvfrom(8)
124
+ assert_equal str[0, 8], a[0]
125
+ assert_equal "AF_UNIX", a[1][0]
126
+ # a[1][1] would be "" or something
127
+ end
128
+ end
129
+
130
+ end # SocketTest.win?
@@ -0,0 +1,5 @@
1
+ MRuby::Gem::Specification.new('mruby-sprintf') do |spec|
2
+ spec.license = 'MIT'
3
+ spec.author = 'mruby developers'
4
+ spec.summary = 'standard Kernel#sprintf method'
5
+ end
@@ -0,0 +1,9 @@
1
+ class String
2
+ def %(args)
3
+ if args.is_a? Array
4
+ sprintf(self, *args)
5
+ else
6
+ sprintf(self, args)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ /*
2
+ ** kernel.c - Kernel module suppliment
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #include <mruby.h>
8
+
9
+ mrb_value mrb_f_sprintf(mrb_state *mrb, mrb_value obj); /* in sprintf.c */
10
+
11
+ void
12
+ mrb_mruby_sprintf_gem_init(mrb_state* mrb)
13
+ {
14
+ struct RClass *krn;
15
+
16
+ if (mrb->kernel_module == NULL) {
17
+ mrb->kernel_module = mrb_define_module(mrb, "Kernel"); /* Might be PARANOID. */
18
+ }
19
+ krn = mrb->kernel_module;
20
+
21
+ mrb_define_method(mrb, krn, "sprintf", mrb_f_sprintf, MRB_ARGS_ANY());
22
+ mrb_define_method(mrb, krn, "format", mrb_f_sprintf, MRB_ARGS_ANY());
23
+ }
24
+
25
+ void
26
+ mrb_mruby_sprintf_gem_final(mrb_state* mrb)
27
+ {
28
+ /* nothing to do. */
29
+ }
30
+
@@ -0,0 +1,1126 @@
1
+ /*
2
+ ** sprintf.c - Kernel.#sprintf
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #include <mruby.h>
8
+
9
+ #include <limits.h>
10
+ #include <stdio.h>
11
+ #include <string.h>
12
+ #include <mruby/string.h>
13
+ #include <mruby/hash.h>
14
+ #include <mruby/numeric.h>
15
+ #ifndef MRB_WITHOUT_FLOAT
16
+ #include <math.h>
17
+ #endif
18
+ #include <ctype.h>
19
+
20
+ #define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
21
+ #define BITSPERDIG MRB_INT_BIT
22
+ #define EXTENDSIGN(n, l) (((~0U << (n)) >> (((n)*(l)) % BITSPERDIG)) & ~(~0U << (n)))
23
+
24
+ mrb_value mrb_str_format(mrb_state *, mrb_int, const mrb_value *, mrb_value);
25
+ #ifndef MRB_WITHOUT_FLOAT
26
+ static void fmt_setup(char*,size_t,int,int,mrb_int,mrb_int);
27
+ #endif
28
+
29
+ static char*
30
+ remove_sign_bits(char *str, int base)
31
+ {
32
+ char *t;
33
+
34
+ t = str;
35
+ if (base == 16) {
36
+ while (*t == 'f') {
37
+ t++;
38
+ }
39
+ }
40
+ else if (base == 8) {
41
+ *t |= EXTENDSIGN(3, strlen(t));
42
+ while (*t == '7') {
43
+ t++;
44
+ }
45
+ }
46
+ else if (base == 2) {
47
+ while (*t == '1') {
48
+ t++;
49
+ }
50
+ }
51
+
52
+ return t;
53
+ }
54
+
55
+ static char
56
+ sign_bits(int base, const char *p)
57
+ {
58
+ char c;
59
+
60
+ switch (base) {
61
+ case 16:
62
+ if (*p == 'X') c = 'F';
63
+ else c = 'f';
64
+ break;
65
+ case 8:
66
+ c = '7'; break;
67
+ case 2:
68
+ c = '1'; break;
69
+ default:
70
+ c = '.'; break;
71
+ }
72
+ return c;
73
+ }
74
+
75
+ static mrb_value
76
+ mrb_fix2binstr(mrb_state *mrb, mrb_value x, int base)
77
+ {
78
+ char buf[66], *b = buf + sizeof buf;
79
+ mrb_int num = mrb_fixnum(x);
80
+ uint64_t val = (uint64_t)num;
81
+ char d;
82
+
83
+ if (base != 2) {
84
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %S", mrb_fixnum_value(base));
85
+ }
86
+ if (val == 0) {
87
+ return mrb_str_new_lit(mrb, "0");
88
+ }
89
+ *--b = '\0';
90
+ do {
91
+ *--b = mrb_digitmap[(int)(val % base)];
92
+ } while (val /= base);
93
+
94
+ if (num < 0) {
95
+ b = remove_sign_bits(b, base);
96
+ switch (base) {
97
+ case 16: d = 'f'; break;
98
+ case 8: d = '7'; break;
99
+ case 2: d = '1'; break;
100
+ default: d = 0; break;
101
+ }
102
+
103
+ if (d && *b != d) {
104
+ *--b = d;
105
+ }
106
+ }
107
+
108
+ return mrb_str_new_cstr(mrb, b);
109
+ }
110
+
111
+ #define FNONE 0
112
+ #define FSHARP 1
113
+ #define FMINUS 2
114
+ #define FPLUS 4
115
+ #define FZERO 8
116
+ #define FSPACE 16
117
+ #define FWIDTH 32
118
+ #define FPREC 64
119
+ #define FPREC0 128
120
+
121
+ #define CHECK(l) do {\
122
+ /* int cr = ENC_CODERANGE(result);*/\
123
+ while ((l) >= bsiz - blen) {\
124
+ bsiz*=2;\
125
+ if (bsiz < 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "too big specifier"); \
126
+ }\
127
+ mrb_str_resize(mrb, result, bsiz);\
128
+ /* ENC_CODERANGE_SET(result, cr);*/\
129
+ buf = RSTRING_PTR(result);\
130
+ } while (0)
131
+
132
+ #define PUSH(s, l) do { \
133
+ CHECK(l);\
134
+ memcpy(&buf[blen], s, l);\
135
+ blen += (mrb_int)(l);\
136
+ } while (0)
137
+
138
+ #define FILL(c, l) do { \
139
+ CHECK(l);\
140
+ memset(&buf[blen], c, l);\
141
+ blen += (l);\
142
+ } while (0)
143
+
144
+ static void
145
+ check_next_arg(mrb_state *mrb, int posarg, int nextarg)
146
+ {
147
+ switch (posarg) {
148
+ case -1:
149
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "unnumbered(%S) mixed with numbered", mrb_fixnum_value(nextarg));
150
+ break;
151
+ case -2:
152
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "unnumbered(%S) mixed with named", mrb_fixnum_value(nextarg));
153
+ break;
154
+ default:
155
+ break;
156
+ }
157
+ }
158
+
159
+ static void
160
+ check_pos_arg(mrb_state *mrb, mrb_int posarg, mrb_int n)
161
+ {
162
+ if (posarg > 0) {
163
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "numbered(%S) after unnumbered(%S)",
164
+ mrb_fixnum_value(n), mrb_fixnum_value(posarg));
165
+ }
166
+ if (posarg == -2) {
167
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "numbered(%S) after named", mrb_fixnum_value(n));
168
+ }
169
+ if (n < 1) {
170
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid index - %S$", mrb_fixnum_value(n));
171
+ }
172
+ }
173
+
174
+ static void
175
+ check_name_arg(mrb_state *mrb, int posarg, const char *name, mrb_int len)
176
+ {
177
+ if (posarg > 0) {
178
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "named%S after unnumbered(%S)",
179
+ mrb_str_new(mrb, (name), (len)), mrb_fixnum_value(posarg));
180
+ }
181
+ if (posarg == -1) {
182
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "named%S after numbered", mrb_str_new(mrb, (name), (len)));
183
+ }
184
+ }
185
+
186
+ #define GETNEXTARG() (\
187
+ check_next_arg(mrb, posarg, nextarg),\
188
+ (posarg = nextarg++, GETNTHARG(posarg)))
189
+
190
+ #define GETARG() (!mrb_undef_p(nextvalue) ? nextvalue : GETNEXTARG())
191
+
192
+ #define GETPOSARG(n) (\
193
+ check_pos_arg(mrb, posarg, n),\
194
+ (posarg = -1, GETNTHARG(n)))
195
+
196
+ #define GETNTHARG(nth) \
197
+ ((nth >= argc) ? (mrb_raise(mrb, E_ARGUMENT_ERROR, "too few arguments"), mrb_undef_value()) : argv[nth])
198
+
199
+ #define GETNAMEARG(id, name, len) (\
200
+ check_name_arg(mrb, posarg, name, len),\
201
+ (posarg = -2, mrb_hash_fetch(mrb, get_hash(mrb, &hash, argc, argv), id, mrb_undef_value())))
202
+
203
+ #define GETNUM(n, val) \
204
+ for (; p < end && ISDIGIT(*p); p++) {\
205
+ mrb_int next_n = 10 * n + (*p - '0'); \
206
+ if (next_n / 10 != n) {\
207
+ mrb_raise(mrb, E_ARGUMENT_ERROR, #val " too big"); \
208
+ } \
209
+ n = next_n; \
210
+ } \
211
+ if (p >= end) { \
212
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "malformed format string - %*[0-9]"); \
213
+ }
214
+
215
+ #define GETASTER(num) do { \
216
+ mrb_value tmp_v; \
217
+ t = p++; \
218
+ n = 0; \
219
+ GETNUM(n, val); \
220
+ if (*p == '$') { \
221
+ tmp_v = GETPOSARG(n); \
222
+ } \
223
+ else { \
224
+ tmp_v = GETNEXTARG(); \
225
+ p = t; \
226
+ } \
227
+ num = mrb_int(mrb, tmp_v); \
228
+ } while (0)
229
+
230
+ static mrb_value
231
+ get_hash(mrb_state *mrb, mrb_value *hash, mrb_int argc, const mrb_value *argv)
232
+ {
233
+ mrb_value tmp;
234
+
235
+ if (!mrb_undef_p(*hash)) return *hash;
236
+ if (argc != 2) {
237
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "one hash required");
238
+ }
239
+ tmp = mrb_check_convert_type(mrb, argv[1], MRB_TT_HASH, "Hash", "to_hash");
240
+ if (mrb_nil_p(tmp)) {
241
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "one hash required");
242
+ }
243
+ return (*hash = tmp);
244
+ }
245
+
246
+ /*
247
+ * call-seq:
248
+ * format(format_string [, arguments...] ) -> string
249
+ * sprintf(format_string [, arguments...] ) -> string
250
+ *
251
+ * Returns the string resulting from applying <i>format_string</i> to
252
+ * any additional arguments. Within the format string, any characters
253
+ * other than format sequences are copied to the result.
254
+ *
255
+ * The syntax of a format sequence is follows.
256
+ *
257
+ * %[flags][width][.precision]type
258
+ *
259
+ * A format
260
+ * sequence consists of a percent sign, followed by optional flags,
261
+ * width, and precision indicators, then terminated with a field type
262
+ * character. The field type controls how the corresponding
263
+ * <code>sprintf</code> argument is to be interpreted, while the flags
264
+ * modify that interpretation.
265
+ *
266
+ * The field type characters are:
267
+ *
268
+ * Field | Integer Format
269
+ * ------+--------------------------------------------------------------
270
+ * b | Convert argument as a binary number.
271
+ * | Negative numbers will be displayed as a two's complement
272
+ * | prefixed with '..1'.
273
+ * B | Equivalent to 'b', but uses an uppercase 0B for prefix
274
+ * | in the alternative format by #.
275
+ * d | Convert argument as a decimal number.
276
+ * i | Identical to 'd'.
277
+ * o | Convert argument as an octal number.
278
+ * | Negative numbers will be displayed as a two's complement
279
+ * | prefixed with '..7'.
280
+ * u | Identical to 'd'.
281
+ * x | Convert argument as a hexadecimal number.
282
+ * | Negative numbers will be displayed as a two's complement
283
+ * | prefixed with '..f' (representing an infinite string of
284
+ * | leading 'ff's).
285
+ * X | Equivalent to 'x', but uses uppercase letters.
286
+ *
287
+ * Field | Float Format
288
+ * ------+--------------------------------------------------------------
289
+ * e | Convert floating point argument into exponential notation
290
+ * | with one digit before the decimal point as [-]d.dddddde[+-]dd.
291
+ * | The precision specifies the number of digits after the decimal
292
+ * | point (defaulting to six).
293
+ * E | Equivalent to 'e', but uses an uppercase E to indicate
294
+ * | the exponent.
295
+ * f | Convert floating point argument as [-]ddd.dddddd,
296
+ * | where the precision specifies the number of digits after
297
+ * | the decimal point.
298
+ * g | Convert a floating point number using exponential form
299
+ * | if the exponent is less than -4 or greater than or
300
+ * | equal to the precision, or in dd.dddd form otherwise.
301
+ * | The precision specifies the number of significant digits.
302
+ * G | Equivalent to 'g', but use an uppercase 'E' in exponent form.
303
+ * a | Convert floating point argument as [-]0xh.hhhhp[+-]dd,
304
+ * | which is consisted from optional sign, "0x", fraction part
305
+ * | as hexadecimal, "p", and exponential part as decimal.
306
+ * A | Equivalent to 'a', but use uppercase 'X' and 'P'.
307
+ *
308
+ * Field | Other Format
309
+ * ------+--------------------------------------------------------------
310
+ * c | Argument is the numeric code for a single character or
311
+ * | a single character string itself.
312
+ * p | The valuing of argument.inspect.
313
+ * s | Argument is a string to be substituted. If the format
314
+ * | sequence contains a precision, at most that many characters
315
+ * | will be copied.
316
+ * % | A percent sign itself will be displayed. No argument taken.
317
+ *
318
+ * The flags modifies the behavior of the formats.
319
+ * The flag characters are:
320
+ *
321
+ * Flag | Applies to | Meaning
322
+ * ---------+---------------+-----------------------------------------
323
+ * space | bBdiouxX | Leave a space at the start of
324
+ * | aAeEfgG | non-negative numbers.
325
+ * | (numeric fmt) | For 'o', 'x', 'X', 'b' and 'B', use
326
+ * | | a minus sign with absolute value for
327
+ * | | negative values.
328
+ * ---------+---------------+-----------------------------------------
329
+ * (digit)$ | all | Specifies the absolute argument number
330
+ * | | for this field. Absolute and relative
331
+ * | | argument numbers cannot be mixed in a
332
+ * | | sprintf string.
333
+ * ---------+---------------+-----------------------------------------
334
+ * # | bBoxX | Use an alternative format.
335
+ * | aAeEfgG | For the conversions 'o', increase the precision
336
+ * | | until the first digit will be '0' if
337
+ * | | it is not formatted as complements.
338
+ * | | For the conversions 'x', 'X', 'b' and 'B'
339
+ * | | on non-zero, prefix the result with "0x",
340
+ * | | "0X", "0b" and "0B", respectively.
341
+ * | | For 'a', 'A', 'e', 'E', 'f', 'g', and 'G',
342
+ * | | force a decimal point to be added,
343
+ * | | even if no digits follow.
344
+ * | | For 'g' and 'G', do not remove trailing zeros.
345
+ * ---------+---------------+-----------------------------------------
346
+ * + | bBdiouxX | Add a leading plus sign to non-negative
347
+ * | aAeEfgG | numbers.
348
+ * | (numeric fmt) | For 'o', 'x', 'X', 'b' and 'B', use
349
+ * | | a minus sign with absolute value for
350
+ * | | negative values.
351
+ * ---------+---------------+-----------------------------------------
352
+ * - | all | Left-justify the result of this conversion.
353
+ * ---------+---------------+-----------------------------------------
354
+ * 0 (zero) | bBdiouxX | Pad with zeros, not spaces.
355
+ * | aAeEfgG | For 'o', 'x', 'X', 'b' and 'B', radix-1
356
+ * | (numeric fmt) | is used for negative numbers formatted as
357
+ * | | complements.
358
+ * ---------+---------------+-----------------------------------------
359
+ * * | all | Use the next argument as the field width.
360
+ * | | If negative, left-justify the result. If the
361
+ * | | asterisk is followed by a number and a dollar
362
+ * | | sign, use the indicated argument as the width.
363
+ *
364
+ * Examples of flags:
365
+ *
366
+ * # '+' and space flag specifies the sign of non-negative numbers.
367
+ * sprintf("%d", 123) #=> "123"
368
+ * sprintf("%+d", 123) #=> "+123"
369
+ * sprintf("% d", 123) #=> " 123"
370
+ *
371
+ * # '#' flag for 'o' increases number of digits to show '0'.
372
+ * # '+' and space flag changes format of negative numbers.
373
+ * sprintf("%o", 123) #=> "173"
374
+ * sprintf("%#o", 123) #=> "0173"
375
+ * sprintf("%+o", -123) #=> "-173"
376
+ * sprintf("%o", -123) #=> "..7605"
377
+ * sprintf("%#o", -123) #=> "..7605"
378
+ *
379
+ * # '#' flag for 'x' add a prefix '0x' for non-zero numbers.
380
+ * # '+' and space flag disables complements for negative numbers.
381
+ * sprintf("%x", 123) #=> "7b"
382
+ * sprintf("%#x", 123) #=> "0x7b"
383
+ * sprintf("%+x", -123) #=> "-7b"
384
+ * sprintf("%x", -123) #=> "..f85"
385
+ * sprintf("%#x", -123) #=> "0x..f85"
386
+ * sprintf("%#x", 0) #=> "0"
387
+ *
388
+ * # '#' for 'X' uses the prefix '0X'.
389
+ * sprintf("%X", 123) #=> "7B"
390
+ * sprintf("%#X", 123) #=> "0X7B"
391
+ *
392
+ * # '#' flag for 'b' add a prefix '0b' for non-zero numbers.
393
+ * # '+' and space flag disables complements for negative numbers.
394
+ * sprintf("%b", 123) #=> "1111011"
395
+ * sprintf("%#b", 123) #=> "0b1111011"
396
+ * sprintf("%+b", -123) #=> "-1111011"
397
+ * sprintf("%b", -123) #=> "..10000101"
398
+ * sprintf("%#b", -123) #=> "0b..10000101"
399
+ * sprintf("%#b", 0) #=> "0"
400
+ *
401
+ * # '#' for 'B' uses the prefix '0B'.
402
+ * sprintf("%B", 123) #=> "1111011"
403
+ * sprintf("%#B", 123) #=> "0B1111011"
404
+ *
405
+ * # '#' for 'e' forces to show the decimal point.
406
+ * sprintf("%.0e", 1) #=> "1e+00"
407
+ * sprintf("%#.0e", 1) #=> "1.e+00"
408
+ *
409
+ * # '#' for 'f' forces to show the decimal point.
410
+ * sprintf("%.0f", 1234) #=> "1234"
411
+ * sprintf("%#.0f", 1234) #=> "1234."
412
+ *
413
+ * # '#' for 'g' forces to show the decimal point.
414
+ * # It also disables stripping lowest zeros.
415
+ * sprintf("%g", 123.4) #=> "123.4"
416
+ * sprintf("%#g", 123.4) #=> "123.400"
417
+ * sprintf("%g", 123456) #=> "123456"
418
+ * sprintf("%#g", 123456) #=> "123456."
419
+ *
420
+ * The field width is an optional integer, followed optionally by a
421
+ * period and a precision. The width specifies the minimum number of
422
+ * characters that will be written to the result for this field.
423
+ *
424
+ * Examples of width:
425
+ *
426
+ * # padding is done by spaces, width=20
427
+ * # 0 or radix-1. <------------------>
428
+ * sprintf("%20d", 123) #=> " 123"
429
+ * sprintf("%+20d", 123) #=> " +123"
430
+ * sprintf("%020d", 123) #=> "00000000000000000123"
431
+ * sprintf("%+020d", 123) #=> "+0000000000000000123"
432
+ * sprintf("% 020d", 123) #=> " 0000000000000000123"
433
+ * sprintf("%-20d", 123) #=> "123 "
434
+ * sprintf("%-+20d", 123) #=> "+123 "
435
+ * sprintf("%- 20d", 123) #=> " 123 "
436
+ * sprintf("%020x", -123) #=> "..ffffffffffffffff85"
437
+ *
438
+ * For
439
+ * numeric fields, the precision controls the number of decimal places
440
+ * displayed. For string fields, the precision determines the maximum
441
+ * number of characters to be copied from the string. (Thus, the format
442
+ * sequence <code>%10.10s</code> will always contribute exactly ten
443
+ * characters to the result.)
444
+ *
445
+ * Examples of precisions:
446
+ *
447
+ * # precision for 'd', 'o', 'x' and 'b' is
448
+ * # minimum number of digits <------>
449
+ * sprintf("%20.8d", 123) #=> " 00000123"
450
+ * sprintf("%20.8o", 123) #=> " 00000173"
451
+ * sprintf("%20.8x", 123) #=> " 0000007b"
452
+ * sprintf("%20.8b", 123) #=> " 01111011"
453
+ * sprintf("%20.8d", -123) #=> " -00000123"
454
+ * sprintf("%20.8o", -123) #=> " ..777605"
455
+ * sprintf("%20.8x", -123) #=> " ..ffff85"
456
+ * sprintf("%20.8b", -11) #=> " ..110101"
457
+ *
458
+ * # "0x" and "0b" for '#x' and '#b' is not counted for
459
+ * # precision but "0" for '#o' is counted. <------>
460
+ * sprintf("%#20.8d", 123) #=> " 00000123"
461
+ * sprintf("%#20.8o", 123) #=> " 00000173"
462
+ * sprintf("%#20.8x", 123) #=> " 0x0000007b"
463
+ * sprintf("%#20.8b", 123) #=> " 0b01111011"
464
+ * sprintf("%#20.8d", -123) #=> " -00000123"
465
+ * sprintf("%#20.8o", -123) #=> " ..777605"
466
+ * sprintf("%#20.8x", -123) #=> " 0x..ffff85"
467
+ * sprintf("%#20.8b", -11) #=> " 0b..110101"
468
+ *
469
+ * # precision for 'e' is number of
470
+ * # digits after the decimal point <------>
471
+ * sprintf("%20.8e", 1234.56789) #=> " 1.23456789e+03"
472
+ *
473
+ * # precision for 'f' is number of
474
+ * # digits after the decimal point <------>
475
+ * sprintf("%20.8f", 1234.56789) #=> " 1234.56789000"
476
+ *
477
+ * # precision for 'g' is number of
478
+ * # significant digits <------->
479
+ * sprintf("%20.8g", 1234.56789) #=> " 1234.5679"
480
+ *
481
+ * # <------->
482
+ * sprintf("%20.8g", 123456789) #=> " 1.2345679e+08"
483
+ *
484
+ * # precision for 's' is
485
+ * # maximum number of characters <------>
486
+ * sprintf("%20.8s", "string test") #=> " string t"
487
+ *
488
+ * Examples:
489
+ *
490
+ * sprintf("%d %04x", 123, 123) #=> "123 007b"
491
+ * sprintf("%08b '%4s'", 123, 123) #=> "01111011 ' 123'"
492
+ * sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello"
493
+ * sprintf("%1$*2$s %2$d", "hello", -8) #=> "hello -8"
494
+ * sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23) #=> "+1.23: 1.23:1.23"
495
+ * sprintf("%u", -123) #=> "-123"
496
+ *
497
+ * For more complex formatting, Ruby supports a reference by name.
498
+ * %<name>s style uses format style, but %{name} style doesn't.
499
+ *
500
+ * Exapmles:
501
+ * sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
502
+ * #=> 1 : 2.000000
503
+ * sprintf("%{foo}f", { :foo => 1 })
504
+ * # => "1f"
505
+ */
506
+
507
+ mrb_value
508
+ mrb_f_sprintf(mrb_state *mrb, mrb_value obj)
509
+ {
510
+ mrb_int argc;
511
+ mrb_value *argv;
512
+
513
+ mrb_get_args(mrb, "*", &argv, &argc);
514
+
515
+ if (argc <= 0) {
516
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "too few arguments");
517
+ return mrb_nil_value();
518
+ }
519
+ else {
520
+ return mrb_str_format(mrb, argc - 1, argv + 1, argv[0]);
521
+ }
522
+ }
523
+
524
+ mrb_value
525
+ mrb_str_format(mrb_state *mrb, mrb_int argc, const mrb_value *argv, mrb_value fmt)
526
+ {
527
+ const char *p, *end;
528
+ char *buf;
529
+ mrb_int blen;
530
+ mrb_int bsiz;
531
+ mrb_value result;
532
+ mrb_int n;
533
+ mrb_int width;
534
+ mrb_int prec;
535
+ int nextarg = 1;
536
+ int posarg = 0;
537
+ mrb_value nextvalue;
538
+ mrb_value str;
539
+ mrb_value hash = mrb_undef_value();
540
+
541
+ #define CHECK_FOR_WIDTH(f) \
542
+ if ((f) & FWIDTH) { \
543
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "width given twice"); \
544
+ } \
545
+ if ((f) & FPREC0) { \
546
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "width after precision"); \
547
+ }
548
+ #define CHECK_FOR_FLAGS(f) \
549
+ if ((f) & FWIDTH) { \
550
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "flag after width"); \
551
+ } \
552
+ if ((f) & FPREC0) { \
553
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "flag after precision"); \
554
+ }
555
+
556
+ ++argc;
557
+ --argv;
558
+ fmt = mrb_str_to_str(mrb, fmt);
559
+ p = RSTRING_PTR(fmt);
560
+ end = p + RSTRING_LEN(fmt);
561
+ blen = 0;
562
+ bsiz = 120;
563
+ result = mrb_str_new_capa(mrb, bsiz);
564
+ buf = RSTRING_PTR(result);
565
+ memset(buf, 0, bsiz);
566
+
567
+ for (; p < end; p++) {
568
+ const char *t;
569
+ mrb_sym id = 0;
570
+ int flags = FNONE;
571
+
572
+ for (t = p; t < end && *t != '%'; t++) ;
573
+ if (t + 1 == end) ++t;
574
+ PUSH(p, t - p);
575
+ if (t >= end)
576
+ goto sprint_exit; /* end of fmt string */
577
+
578
+ p = t + 1; /* skip '%' */
579
+
580
+ width = prec = -1;
581
+ nextvalue = mrb_undef_value();
582
+
583
+ retry:
584
+ switch (*p) {
585
+ default:
586
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed format string - \\%%S", mrb_str_new(mrb, p, 1));
587
+ break;
588
+
589
+ case ' ':
590
+ CHECK_FOR_FLAGS(flags);
591
+ flags |= FSPACE;
592
+ p++;
593
+ goto retry;
594
+
595
+ case '#':
596
+ CHECK_FOR_FLAGS(flags);
597
+ flags |= FSHARP;
598
+ p++;
599
+ goto retry;
600
+
601
+ case '+':
602
+ CHECK_FOR_FLAGS(flags);
603
+ flags |= FPLUS;
604
+ p++;
605
+ goto retry;
606
+
607
+ case '-':
608
+ CHECK_FOR_FLAGS(flags);
609
+ flags |= FMINUS;
610
+ p++;
611
+ goto retry;
612
+
613
+ case '0':
614
+ CHECK_FOR_FLAGS(flags);
615
+ flags |= FZERO;
616
+ p++;
617
+ goto retry;
618
+
619
+ case '1': case '2': case '3': case '4':
620
+ case '5': case '6': case '7': case '8': case '9':
621
+ n = 0;
622
+ GETNUM(n, width);
623
+ if (*p == '$') {
624
+ if (!mrb_undef_p(nextvalue)) {
625
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "value given twice - %S$", mrb_fixnum_value(n));
626
+ }
627
+ nextvalue = GETPOSARG(n);
628
+ p++;
629
+ goto retry;
630
+ }
631
+ CHECK_FOR_WIDTH(flags);
632
+ width = n;
633
+ flags |= FWIDTH;
634
+ goto retry;
635
+
636
+ case '<':
637
+ case '{': {
638
+ const char *start = p;
639
+ char term = (*p == '<') ? '>' : '}';
640
+ mrb_value symname;
641
+
642
+ for (; p < end && *p != term; )
643
+ p++;
644
+ if (id) {
645
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "name%S after <%S>",
646
+ mrb_str_new(mrb, start, p - start + 1), mrb_sym2str(mrb, id));
647
+ }
648
+ symname = mrb_str_new(mrb, start + 1, p - start - 1);
649
+ id = mrb_intern_str(mrb, symname);
650
+ nextvalue = GETNAMEARG(mrb_symbol_value(id), start, (mrb_int)(p - start + 1));
651
+ if (mrb_undef_p(nextvalue)) {
652
+ mrb_raisef(mrb, E_KEY_ERROR, "key%S not found", mrb_str_new(mrb, start, p - start + 1));
653
+ }
654
+ if (term == '}') goto format_s;
655
+ p++;
656
+ goto retry;
657
+ }
658
+
659
+ case '*':
660
+ CHECK_FOR_WIDTH(flags);
661
+ flags |= FWIDTH;
662
+ GETASTER(width);
663
+ if (width < 0) {
664
+ flags |= FMINUS;
665
+ width = -width;
666
+ }
667
+ p++;
668
+ goto retry;
669
+
670
+ case '.':
671
+ if (flags & FPREC0) {
672
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "precision given twice");
673
+ }
674
+ flags |= FPREC|FPREC0;
675
+
676
+ prec = 0;
677
+ p++;
678
+ if (*p == '*') {
679
+ GETASTER(prec);
680
+ if (prec < 0) { /* ignore negative precision */
681
+ flags &= ~FPREC;
682
+ }
683
+ p++;
684
+ goto retry;
685
+ }
686
+
687
+ GETNUM(prec, precision);
688
+ goto retry;
689
+
690
+ case '\n':
691
+ case '\0':
692
+ p--;
693
+ /* fallthrough */
694
+ case '%':
695
+ if (flags != FNONE) {
696
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid format character - %");
697
+ }
698
+ PUSH("%", 1);
699
+ break;
700
+
701
+ case 'c': {
702
+ mrb_value val = GETARG();
703
+ mrb_value tmp;
704
+ char *c;
705
+
706
+ tmp = mrb_check_string_type(mrb, val);
707
+ if (!mrb_nil_p(tmp)) {
708
+ if (RSTRING_LEN(tmp) != 1) {
709
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "%c requires a character");
710
+ }
711
+ }
712
+ else if (mrb_fixnum_p(val)) {
713
+ mrb_int n = mrb_fixnum(val);
714
+
715
+ if (n < 0x80) {
716
+ char buf[1];
717
+
718
+ buf[0] = (char)n;
719
+ tmp = mrb_str_new(mrb, buf, 1);
720
+ }
721
+ else {
722
+ tmp = mrb_funcall(mrb, val, "chr", 0);
723
+ mrb_check_type(mrb, tmp, MRB_TT_STRING);
724
+ }
725
+ }
726
+ else {
727
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid character");
728
+ }
729
+ c = RSTRING_PTR(tmp);
730
+ n = RSTRING_LEN(tmp);
731
+ if (!(flags & FWIDTH)) {
732
+ PUSH(c, n);
733
+ }
734
+ else if ((flags & FMINUS)) {
735
+ PUSH(c, n);
736
+ if (width>0) FILL(' ', width-1);
737
+ }
738
+ else {
739
+ if (width>0) FILL(' ', width-1);
740
+ PUSH(c, n);
741
+ }
742
+ }
743
+ break;
744
+
745
+ case 's':
746
+ case 'p':
747
+ format_s:
748
+ {
749
+ mrb_value arg = GETARG();
750
+ mrb_int len;
751
+ mrb_int slen;
752
+
753
+ if (*p == 'p') arg = mrb_inspect(mrb, arg);
754
+ str = mrb_obj_as_string(mrb, arg);
755
+ len = RSTRING_LEN(str);
756
+ if (RSTRING(result)->flags & MRB_STR_EMBED) {
757
+ mrb_int tmp_n = len;
758
+ RSTRING(result)->flags &= ~MRB_STR_EMBED_LEN_MASK;
759
+ RSTRING(result)->flags |= tmp_n << MRB_STR_EMBED_LEN_SHIFT;
760
+ }
761
+ else {
762
+ RSTRING(result)->as.heap.len = blen;
763
+ }
764
+ if (flags&(FPREC|FWIDTH)) {
765
+ slen = RSTRING_LEN(str);
766
+ if (slen < 0) {
767
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid mbstring sequence");
768
+ }
769
+ if ((flags&FPREC) && (prec < slen)) {
770
+ char *p = RSTRING_PTR(str) + prec;
771
+ slen = prec;
772
+ len = (mrb_int)(p - RSTRING_PTR(str));
773
+ }
774
+ /* need to adjust multi-byte string pos */
775
+ if ((flags&FWIDTH) && (width > slen)) {
776
+ width -= (int)slen;
777
+ if (!(flags&FMINUS)) {
778
+ FILL(' ', width);
779
+ }
780
+ PUSH(RSTRING_PTR(str), len);
781
+ if (flags&FMINUS) {
782
+ FILL(' ', width);
783
+ }
784
+ break;
785
+ }
786
+ }
787
+ PUSH(RSTRING_PTR(str), len);
788
+ }
789
+ break;
790
+
791
+ case 'd':
792
+ case 'i':
793
+ case 'o':
794
+ case 'x':
795
+ case 'X':
796
+ case 'b':
797
+ case 'B':
798
+ case 'u': {
799
+ mrb_value val = GETARG();
800
+ char nbuf[68], *s;
801
+ const char *prefix = NULL;
802
+ int sign = 0, dots = 0;
803
+ char sc = 0;
804
+ mrb_int v = 0;
805
+ int base;
806
+ mrb_int len;
807
+
808
+ if (flags & FSHARP) {
809
+ switch (*p) {
810
+ case 'o': prefix = "0"; break;
811
+ case 'x': prefix = "0x"; break;
812
+ case 'X': prefix = "0X"; break;
813
+ case 'b': prefix = "0b"; break;
814
+ case 'B': prefix = "0B"; break;
815
+ default: break;
816
+ }
817
+ }
818
+
819
+ bin_retry:
820
+ switch (mrb_type(val)) {
821
+ #ifndef MRB_WITHOUT_FLOAT
822
+ case MRB_TT_FLOAT:
823
+ val = mrb_flo_to_fixnum(mrb, val);
824
+ if (mrb_fixnum_p(val)) goto bin_retry;
825
+ break;
826
+ #endif
827
+ case MRB_TT_STRING:
828
+ val = mrb_str_to_inum(mrb, val, 0, TRUE);
829
+ goto bin_retry;
830
+ case MRB_TT_FIXNUM:
831
+ v = mrb_fixnum(val);
832
+ break;
833
+ default:
834
+ val = mrb_Integer(mrb, val);
835
+ goto bin_retry;
836
+ }
837
+
838
+ switch (*p) {
839
+ case 'o':
840
+ base = 8; break;
841
+ case 'x':
842
+ case 'X':
843
+ base = 16; break;
844
+ case 'b':
845
+ case 'B':
846
+ base = 2; break;
847
+ case 'u':
848
+ case 'd':
849
+ case 'i':
850
+ sign = 1;
851
+ default:
852
+ base = 10; break;
853
+ }
854
+
855
+ if (sign) {
856
+ if (v >= 0) {
857
+ if (flags & FPLUS) {
858
+ sc = '+';
859
+ width--;
860
+ }
861
+ else if (flags & FSPACE) {
862
+ sc = ' ';
863
+ width--;
864
+ }
865
+ }
866
+ else {
867
+ sc = '-';
868
+ width--;
869
+ }
870
+ mrb_assert(base == 10);
871
+ snprintf(nbuf, sizeof(nbuf), "%" MRB_PRId, v);
872
+ s = nbuf;
873
+ if (v < 0) s++; /* skip minus sign */
874
+ }
875
+ else {
876
+ s = nbuf;
877
+ if (v < 0) {
878
+ dots = 1;
879
+ }
880
+ switch (base) {
881
+ case 2:
882
+ if (v < 0) {
883
+ val = mrb_fix2binstr(mrb, mrb_fixnum_value(v), base);
884
+ }
885
+ else {
886
+ val = mrb_fixnum_to_str(mrb, mrb_fixnum_value(v), base);
887
+ }
888
+ strncpy(++s, RSTRING_PTR(val), sizeof(nbuf)-1);
889
+ break;
890
+ case 8:
891
+ snprintf(++s, sizeof(nbuf)-1, "%" MRB_PRIo, v);
892
+ break;
893
+ case 16:
894
+ snprintf(++s, sizeof(nbuf)-1, "%" MRB_PRIx, v);
895
+ break;
896
+ }
897
+ if (v < 0) {
898
+ char d;
899
+
900
+ s = remove_sign_bits(s, base);
901
+ switch (base) {
902
+ case 16: d = 'f'; break;
903
+ case 8: d = '7'; break;
904
+ case 2: d = '1'; break;
905
+ default: d = 0; break;
906
+ }
907
+
908
+ if (d && *s != d) {
909
+ *--s = d;
910
+ }
911
+ }
912
+ }
913
+ {
914
+ size_t size;
915
+ size = strlen(s);
916
+ /* PARANOID: assert(size <= MRB_INT_MAX) */
917
+ len = (mrb_int)size;
918
+ }
919
+
920
+ if (*p == 'X') {
921
+ char *pp = s;
922
+ int c;
923
+ while ((c = (int)(unsigned char)*pp) != 0) {
924
+ *pp = toupper(c);
925
+ pp++;
926
+ }
927
+ }
928
+
929
+ if (prefix && !prefix[1]) { /* octal */
930
+ if (dots) {
931
+ prefix = NULL;
932
+ }
933
+ else if (len == 1 && *s == '0') {
934
+ len = 0;
935
+ if (flags & FPREC) prec--;
936
+ }
937
+ else if ((flags & FPREC) && (prec > len)) {
938
+ prefix = NULL;
939
+ }
940
+ }
941
+ else if (len == 1 && *s == '0') {
942
+ prefix = NULL;
943
+ }
944
+
945
+ if (prefix) {
946
+ size_t size;
947
+ size = strlen(prefix);
948
+ /* PARANOID: assert(size <= MRB_INT_MAX).
949
+ * this check is absolutely paranoid. */
950
+ width -= (mrb_int)size;
951
+ }
952
+
953
+ if ((flags & (FZERO|FMINUS|FPREC)) == FZERO) {
954
+ prec = width;
955
+ width = 0;
956
+ }
957
+ else {
958
+ if (prec < len) {
959
+ if (!prefix && prec == 0 && len == 1 && *s == '0') len = 0;
960
+ prec = len;
961
+ }
962
+ width -= prec;
963
+ }
964
+
965
+ if (!(flags&FMINUS) && width > 0) {
966
+ FILL(' ', width);
967
+ width = 0;
968
+ }
969
+
970
+ if (sc) PUSH(&sc, 1);
971
+
972
+ if (prefix) {
973
+ int plen = (int)strlen(prefix);
974
+ PUSH(prefix, plen);
975
+ }
976
+ if (dots) {
977
+ prec -= 2;
978
+ width -= 2;
979
+ PUSH("..", 2);
980
+ }
981
+
982
+ if (prec > len) {
983
+ CHECK(prec - len);
984
+ if ((flags & (FMINUS|FPREC)) != FMINUS) {
985
+ char c = '0';
986
+ FILL(c, prec - len);
987
+ } else if (v < 0) {
988
+ char c = sign_bits(base, p);
989
+ FILL(c, prec - len);
990
+ }
991
+ }
992
+ PUSH(s, len);
993
+ if (width > 0) {
994
+ FILL(' ', width);
995
+ }
996
+ }
997
+ break;
998
+
999
+ #ifndef MRB_WITHOUT_FLOAT
1000
+ case 'f':
1001
+ case 'g':
1002
+ case 'G':
1003
+ case 'e':
1004
+ case 'E':
1005
+ case 'a':
1006
+ case 'A': {
1007
+ mrb_value val = GETARG();
1008
+ double fval;
1009
+ mrb_int i;
1010
+ mrb_int need = 6;
1011
+ char fbuf[32];
1012
+ int frexp_result;
1013
+
1014
+ fval = mrb_float(mrb_Float(mrb, val));
1015
+ if (!isfinite(fval)) {
1016
+ const char *expr;
1017
+ const mrb_int elen = 3;
1018
+ char sign = '\0';
1019
+
1020
+ if (isnan(fval)) {
1021
+ expr = "NaN";
1022
+ }
1023
+ else {
1024
+ expr = "Inf";
1025
+ }
1026
+ need = elen;
1027
+ if (!isnan(fval) && fval < 0.0)
1028
+ sign = '-';
1029
+ else if (flags & (FPLUS|FSPACE))
1030
+ sign = (flags & FPLUS) ? '+' : ' ';
1031
+ if (sign)
1032
+ ++need;
1033
+ if ((flags & FWIDTH) && need < width)
1034
+ need = width;
1035
+
1036
+ if (need < 0) {
1037
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "width too big");
1038
+ }
1039
+ FILL(' ', need);
1040
+ if (flags & FMINUS) {
1041
+ if (sign)
1042
+ buf[blen - need--] = sign;
1043
+ memcpy(&buf[blen - need], expr, elen);
1044
+ }
1045
+ else {
1046
+ if (sign)
1047
+ buf[blen - elen - 1] = sign;
1048
+ memcpy(&buf[blen - elen], expr, elen);
1049
+ }
1050
+ break;
1051
+ }
1052
+
1053
+ fmt_setup(fbuf, sizeof(fbuf), *p, flags, width, prec);
1054
+ need = 0;
1055
+ if (*p != 'e' && *p != 'E') {
1056
+ i = INT_MIN;
1057
+ frexp(fval, &frexp_result);
1058
+ i = (mrb_int)frexp_result;
1059
+ if (i > 0)
1060
+ need = BIT_DIGITS(i);
1061
+ }
1062
+ need += (flags&FPREC) ? prec : 6;
1063
+ if ((flags&FWIDTH) && need < width)
1064
+ need = width;
1065
+ need += 20;
1066
+ if (need <= 0) {
1067
+ mrb_raise(mrb, E_ARGUMENT_ERROR,
1068
+ (width > prec ? "width too big" : "prec too big"));
1069
+ }
1070
+
1071
+ CHECK(need);
1072
+ n = snprintf(&buf[blen], need, fbuf, fval);
1073
+ if (n < 0) {
1074
+ mrb_raise(mrb, E_RUNTIME_ERROR, "formatting error");
1075
+ }
1076
+ blen += n;
1077
+ }
1078
+ break;
1079
+ #endif
1080
+ }
1081
+ flags = FNONE;
1082
+ }
1083
+
1084
+ sprint_exit:
1085
+ #if 0
1086
+ /* XXX - We cannot validate the number of arguments if (digit)$ style used.
1087
+ */
1088
+ if (posarg >= 0 && nextarg < argc) {
1089
+ const char *mesg = "too many arguments for format string";
1090
+ if (mrb_test(ruby_debug)) mrb_raise(mrb, E_ARGUMENT_ERROR, mesg);
1091
+ if (mrb_test(ruby_verbose)) mrb_warn(mrb, "%S", mrb_str_new_cstr(mrb, mesg));
1092
+ }
1093
+ #endif
1094
+ mrb_str_resize(mrb, result, blen);
1095
+
1096
+ return result;
1097
+ }
1098
+
1099
+ #ifndef MRB_WITHOUT_FLOAT
1100
+ static void
1101
+ fmt_setup(char *buf, size_t size, int c, int flags, mrb_int width, mrb_int prec)
1102
+ {
1103
+ char *end = buf + size;
1104
+ int n;
1105
+
1106
+ *buf++ = '%';
1107
+ if (flags & FSHARP) *buf++ = '#';
1108
+ if (flags & FPLUS) *buf++ = '+';
1109
+ if (flags & FMINUS) *buf++ = '-';
1110
+ if (flags & FZERO) *buf++ = '0';
1111
+ if (flags & FSPACE) *buf++ = ' ';
1112
+
1113
+ if (flags & FWIDTH) {
1114
+ n = snprintf(buf, end - buf, "%d", (int)width);
1115
+ buf += n;
1116
+ }
1117
+
1118
+ if (flags & FPREC) {
1119
+ n = snprintf(buf, end - buf, ".%d", (int)prec);
1120
+ buf += n;
1121
+ }
1122
+
1123
+ *buf++ = c;
1124
+ *buf = '\0';
1125
+ }
1126
+ #endif