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,60 @@
1
+ assert('ObjectSpace.count_objects') do
2
+ h = {}
3
+ f = Fiber.new {} if Object.const_defined? :Fiber
4
+ ObjectSpace.count_objects(h)
5
+ assert_kind_of(Hash, h)
6
+ assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) })
7
+ assert_true(h.values.all? {|x| x.is_a?(Integer) })
8
+
9
+ assert_true(h.has_key?(:TOTAL))
10
+ assert_true(h.has_key?(:FREE))
11
+ assert_true(h.has_key?(:T_FIBER)) if Object.const_defined? :Fiber
12
+
13
+ assert_equal(h[:TOTAL] * 2, h.values.reduce(:+))
14
+
15
+ h = ObjectSpace.count_objects
16
+ assert_kind_of(Hash, h)
17
+ assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) })
18
+ assert_true(h.values.all? {|x| x.is_a?(Integer) })
19
+
20
+ assert_raise(TypeError) { ObjectSpace.count_objects(1) }
21
+
22
+ h0 = {:T_FOO=>1000}
23
+ h = ObjectSpace.count_objects(h0)
24
+ assert_false(h0.has_key?(:T_FOO))
25
+
26
+ GC.start
27
+ h_after = {}
28
+ h_before = ObjectSpace.count_objects
29
+
30
+ objs = []
31
+ 1000.times do
32
+ objs << {}
33
+ end
34
+ ObjectSpace.count_objects(h)
35
+ objs = nil
36
+ GC.start
37
+ ObjectSpace.count_objects(h_after)
38
+
39
+ assert_equal(h[:T_HASH], h_before[:T_HASH] + 1000)
40
+ assert_equal(h_after[:T_HASH], h_before[:T_HASH])
41
+ end
42
+
43
+ assert('ObjectSpace.each_object') do
44
+ objs = []
45
+ objs_count = ObjectSpace.each_object { |obj|
46
+ objs << obj
47
+ }
48
+ assert_equal objs.length, objs_count
49
+
50
+ arys = []
51
+ arys_count = ObjectSpace.each_object(Array) { |obj|
52
+ arys << obj
53
+ }
54
+ assert_equal arys.length, arys_count
55
+ assert_true arys.length < objs.length
56
+ end
57
+
58
+ assert 'Check class pointer of ObjectSpace.each_object.' do
59
+ ObjectSpace.each_object { |obj| !obj }
60
+ end
@@ -0,0 +1,70 @@
1
+ mruby-pack (pack / unpack)
2
+ =========
3
+
4
+ mruby-pack provides `Array#pack` and `String#unpack` for mruby.
5
+
6
+
7
+ ## Installation
8
+ Add the line below into your `build_config.rb`:
9
+
10
+ ```
11
+ conf.gem :github => 'iij/mruby-pack'
12
+ ```
13
+
14
+ There is no dependency on other mrbgems.
15
+
16
+
17
+ ## Supported template string
18
+ - A : arbitrary binary string (space padded, count is width)
19
+ - a : arbitrary binary string (null padded, count is width)
20
+ - C : 8-bit unsigned (unsigned char)
21
+ - c : 8-bit signed (signed char)
22
+ - D, d: 64-bit float, native format
23
+ - E : 64-bit float, little endian byte order
24
+ - e : 32-bit float, little endian byte order
25
+ - F, f: 32-bit float, native format
26
+ - G : 64-bit float, network (big-endian) byte order
27
+ - g : 32-bit float, network (big-endian) byte order
28
+ - H : hex string (high nibble first)
29
+ - h : hex string (low nibble first)
30
+ - I : unsigned integer, native endian (`unsigned int` in C)
31
+ - i : signed integer, native endian (`int` in C)
32
+ - L : 32-bit unsigned, native endian (`uint32_t`)
33
+ - l : 32-bit signed, native endian (`int32_t`)
34
+ - m : base64 encoded string (see RFC 2045, count is width)
35
+ - N : 32-bit unsigned, network (big-endian) byte order
36
+ - n : 16-bit unsigned, network (big-endian) byte order
37
+ - Q : 64-bit unsigned, native endian (`uint64_t`)
38
+ - q : 64-bit signed, native endian (`int64_t`)
39
+ - S : 16-bit unsigned, native endian (`uint16_t`)
40
+ - s : 16-bit signed, native endian (`int16_t`)
41
+ - U : UTF-8 character
42
+ - V : 32-bit unsigned, VAX (little-endian) byte order
43
+ - v : 16-bit unsigned, VAX (little-endian) byte order
44
+ - x : null byte
45
+ - Z : same as "a", except that null is added with *
46
+
47
+
48
+
49
+ ## License
50
+
51
+ Copyright (c) 2012 Internet Initiative Japan Inc.
52
+
53
+ Permission is hereby granted, free of charge, to any person obtaining a
54
+ copy of this software and associated documentation files (the "Software"),
55
+ to deal in the Software without restriction, including without limitation
56
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
57
+ and/or sell copies of the Software, and to permit persons to whom the
58
+ Software is furnished to do so, subject to the following conditions:
59
+
60
+ The above copyright notice and this permission notice shall be included in
61
+ all copies or substantial portions of the Software.
62
+
63
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
64
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
65
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
66
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
67
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
68
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
69
+ DEALINGS IN THE SOFTWARE.
70
+
@@ -0,0 +1,7 @@
1
+ MRuby::Gem::Specification.new('mruby-pack') do |spec|
2
+ spec.license = 'MIT'
3
+ spec.authors = 'Internet Initiative Japan Inc.'
4
+ spec.summary = 'Array#pack and String#unpack method'
5
+
6
+ spec.cc.include_paths << "#{build.root}/src"
7
+ end
@@ -0,0 +1,157 @@
1
+ # encoding: ascii
2
+
3
+ # a = Array, s = String, t = Template
4
+
5
+ def packtest(a, s, t)
6
+ begin
7
+ r = a.pack(t)
8
+ return if r == s
9
+ puts "#{a.inspect}.pack(#{t.inspect}) -> #{r.inspect} should be #{s.inspect}"
10
+ rescue => r
11
+ unless r.is_a? s
12
+ puts "#{a.inspect}.pack(#{t.inspect}) -> #{r.inspect} should be #{s.inspect}"
13
+ end
14
+ end
15
+ end
16
+
17
+ def unpacktest(a, s, t)
18
+ r = s.unpack(t)
19
+ return if r == a
20
+ puts "#{s.inspect}.unpack(#{t.inspect}) -> #{r.inspect} should be #{a.inspect}"
21
+ end
22
+
23
+ def pptest(a, s, t)
24
+ packtest(a, s, t)
25
+ unpacktest(a, s, t)
26
+ end
27
+
28
+ pptest [1], "\x01", "C"
29
+
30
+ packtest [1.1], "\x01", "C"
31
+ packtest [-1], "\xff", "C"
32
+ packtest [1,2], "\x01\x02", "C2"
33
+ #packtest [1], "X", ArgumentError
34
+
35
+ unpacktest [48, nil], "0", "CC"
36
+ unpacktest [160, -96], "\xa0\xa0", "Cc"
37
+ unpacktest [49, 50, 51], "123", "C*"
38
+
39
+ pptest [12849], "12", "S"
40
+ unpacktest [nil], "0", "S"
41
+ unpacktest [12849, nil], "123", "SS"
42
+ unpacktest [12849], "123", "S*"
43
+
44
+ pptest [10000], "\x27\x10", "s>"
45
+ pptest [-10000], "\xd8\xf0", "s>"
46
+ pptest [50000], "\xc3\x50", "S>"
47
+
48
+ pptest [10000], "\x10\x27", "s<"
49
+ pptest [-10000], "\xf0\xd8", "s<"
50
+ pptest [50000], "\x50\xc3", "S<"
51
+
52
+ pptest [1000000000], "\x3b\x9a\xca\x00", "l>"
53
+ pptest [-1000000000], "\xc4\x65\x36\x00", "l>"
54
+
55
+ pptest [1], "\x01\x00\x00\x00", "L<"
56
+ pptest [258], "\x02\x01\x00\x00", "L<"
57
+ pptest [66051], "\x03\x02\x01\x00", "L<"
58
+ pptest [16909060], "\x04\x03\x02\x01", "L<"
59
+ pptest [16909060], "\x01\x02\x03\x04", "L>"
60
+
61
+ packtest [-1], "\xff\xff\xff\xff", "L<"
62
+
63
+ pptest [1000000000], "\x00\x00\x00\x00\x3b\x9a\xca\x00", "q>"
64
+ pptest [-1000000000], "\xff\xff\xff\xff\xc4\x65\x36\x00", "q>"
65
+
66
+ if (2**33).is_a? Fixnum
67
+ pptest [81985529216486895], "\x01\x23\x45\x67\x89\xab\xcd\xef", "q>"
68
+ pptest [-1167088121787636991], "\x01\x23\x45\x67\x89\xab\xcd\xef", "q<"
69
+ end
70
+
71
+ pptest [16909060], "\x01\x02\x03\x04", "N"
72
+ pptest [258], "\x01\x02", "n"
73
+ pptest [32769], "\x80\x01", "n"
74
+
75
+ pptest [16909060], "\x04\x03\x02\x01", "V"
76
+ pptest [258], "\x02\x01", "v"
77
+
78
+ packtest [""], "", "m"
79
+ packtest ["a"], "YQ==\n", "m"
80
+ packtest ["ab"], "YWI=\n", "m"
81
+ packtest ["abc"], "YWJj\n", "m"
82
+ packtest ["abcd"], "YWJjZA==\n", "m"
83
+
84
+ unpacktest [""], "", "m"
85
+ unpacktest ["a"], "YQ==\n", "m"
86
+ unpacktest ["ab"], "YWI=\n", "m"
87
+ unpacktest ["abc"], "YWJj\n", "m"
88
+ unpacktest ["abcd"], "YWJjZA==\n", "m"
89
+
90
+ packtest [""], "\0", "H"
91
+ packtest ["3"], "0", "H"
92
+ packtest ["34"], "", "H0"
93
+ packtest ["34"], "0", "H"
94
+ packtest ["34"], "4", "H2"
95
+ packtest ["34"], "4\0", "H3"
96
+ packtest ["3456"], "4P", "H3"
97
+ packtest ["34563"], "4V0", "H*"
98
+ packtest ["5a"], "Z", "H*"
99
+ packtest ["5A"], "Z", "H*"
100
+
101
+ unpacktest [""], "", "H"
102
+ unpacktest [""], "0", "H0"
103
+ unpacktest ["3"], "0", "H"
104
+ unpacktest ["30"], "0", "H2"
105
+ unpacktest ["30"], "0", "H3"
106
+ unpacktest ["303"], "01", "H3"
107
+ unpacktest ["303132"], "012", "H*"
108
+ unpacktest ["3031", 50], "012", "H4C"
109
+ unpacktest ["5a"], "Z", "H*"
110
+
111
+ packtest [""], "\0", "h"
112
+ packtest ["3"], "\03", "h"
113
+ packtest ["34"], "", "h0"
114
+ packtest ["34"], "\03", "h"
115
+ packtest ["34"], "C", "h2"
116
+ packtest ["34"], "C\0", "h3"
117
+ packtest ["3456"], "C\05", "h3"
118
+ packtest ["34563"], "Ce\03", "h*"
119
+
120
+ packtest [""], " ", "A"
121
+ unpacktest [""], "", "A"
122
+ pptest ["1"], "1", "A"
123
+ pptest ["1"], "1 ", "A2"
124
+ unpacktest ["1"], "1", "A2"
125
+ unpacktest ["1"], "1 ", "A2"
126
+ unpacktest ["1"], "1\0", "A2"
127
+ packtest ["12"], "1", "A"
128
+ unpacktest ["1"], "12", "A"
129
+ pptest ["123"], "123", "A*"
130
+ packtest ["1","2"], "2", "A0A"
131
+ unpacktest ["","2"], "2", "A0A"
132
+
133
+ packtest [""], "\0", "a"
134
+ unpacktest [""], "", "a"
135
+ pptest ["1"], "1", "a"
136
+ pptest ["1 "], "1 ", "a2"
137
+ pptest ["1\0"], "1\0", "a2"
138
+ packtest ["1"], "1\0", "a2"
139
+ pptest ["123"], "123", "a*"
140
+
141
+ packtest [""], "\0", "Z"
142
+ unpacktest [""], "", "Z"
143
+ pptest ["1"], "1", "Z"
144
+ pptest ["1"], "1\0", "Z2"
145
+ pptest ["1 "], "1 ", "Z2"
146
+ pptest ["123"], "123\0", "Z*"
147
+ pptest ["1","2"], "12", "ZZ"
148
+ pptest ["1","2"], "1\0002", "Z*Z"
149
+ unpacktest ["1","3"], "1\00023", "Z3Z"
150
+
151
+ packtest [1, 2], "\x01\x02", "CyC"
152
+
153
+ packtest [65], "A", 'U'
154
+ packtest [59411], "\xEE\xA0\x93", 'U'
155
+
156
+ pptest [1], "\x00\x01", "xC"
157
+ unpacktest [2], "\xcc\x02", "xC"
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # mrbgems test runner
4
+ #
5
+
6
+ gemname = File.basename(File.dirname(File.expand_path __FILE__))
7
+
8
+ if __FILE__ == $0
9
+ repository, dir = 'https://github.com/mruby/mruby.git', 'tmp/mruby'
10
+ build_args = ARGV
11
+ build_args = ['all', 'test'] if build_args.nil? or build_args.empty?
12
+
13
+ Dir.mkdir 'tmp' unless File.exist?('tmp')
14
+ unless File.exist?(dir)
15
+ system "git clone #{repository} #{dir}"
16
+ end
17
+
18
+ exit system(%Q[cd #{dir}; MRUBY_CONFIG=#{File.expand_path __FILE__} ruby minirake #{build_args.join(' ')}])
19
+ end
20
+
21
+ MRuby::Build.new do |conf|
22
+ toolchain :gcc
23
+ conf.gembox 'default'
24
+
25
+ conf.gem File.expand_path(File.dirname(__FILE__))
26
+ end
@@ -0,0 +1,1281 @@
1
+ /*
2
+ ** pack.c - Array#pack, String#unpack
3
+ */
4
+
5
+ #include "mruby.h"
6
+ #include "error.h"
7
+ #include "mruby/array.h"
8
+ #include "mruby/class.h"
9
+ #include "mruby/numeric.h"
10
+ #include "mruby/string.h"
11
+ #include "mruby/variable.h"
12
+
13
+ #include <ctype.h>
14
+ #include <errno.h>
15
+ #include <limits.h>
16
+ #include <stdio.h>
17
+ #include <string.h>
18
+
19
+ struct tmpl {
20
+ mrb_value str;
21
+ int idx;
22
+ };
23
+
24
+ enum {
25
+ PACK_DIR_CHAR, /* C */
26
+ PACK_DIR_SHORT, /* S */
27
+ PACK_DIR_LONG, /* L */
28
+ PACK_DIR_QUAD, /* Q */
29
+ //PACK_DIR_INT, /* i */
30
+ //PACK_DIR_VAX,
31
+ PACK_DIR_UTF8, /* U */
32
+ //PACK_DIR_BER,
33
+ PACK_DIR_DOUBLE, /* E */
34
+ PACK_DIR_FLOAT, /* f */
35
+ PACK_DIR_STR, /* A */
36
+ PACK_DIR_HEX, /* h */
37
+ PACK_DIR_BASE64, /* m */
38
+ PACK_DIR_NUL, /* x */
39
+ PACK_DIR_INVALID
40
+ };
41
+
42
+ enum {
43
+ PACK_TYPE_INTEGER,
44
+ PACK_TYPE_FLOAT,
45
+ PACK_TYPE_STRING,
46
+ PACK_TYPE_NONE
47
+ };
48
+
49
+ #define PACK_FLAG_s 0x00000001 /* native size ("_" "!") */
50
+ #define PACK_FLAG_a 0x00000002 /* null padding ("a") */
51
+ #define PACK_FLAG_Z 0x00000004 /* append nul char ("z") */
52
+ #define PACK_FLAG_SIGNED 0x00000008 /* native size ("_" "!") */
53
+ #define PACK_FLAG_GT 0x00000010 /* big endian (">") */
54
+ #define PACK_FLAG_LT 0x00000020 /* little endian ("<") */
55
+ #define PACK_FLAG_WIDTH 0x00000040 /* "count" is "width" */
56
+ #define PACK_FLAG_LSB 0x00000080 /* LSB / low nibble first */
57
+ #define PACK_FLAG_COUNT2 0x00000100 /* "count" is special... */
58
+ #define PACK_FLAG_LITTLEENDIAN 0x00000200 /* little endian actually */
59
+
60
+ #define PACK_BASE64_IGNORE 0xff
61
+ #define PACK_BASE64_PADDING 0xfe
62
+
63
+ static int littleendian = 0;
64
+
65
+ const static unsigned char base64chars[] =
66
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
67
+ static signed char base64_dec_tab[128];
68
+
69
+
70
+ static int
71
+ check_little_endian(void)
72
+ {
73
+ unsigned int n = 1;
74
+ return (*(unsigned char *)&n == 1);
75
+ }
76
+
77
+ static unsigned int
78
+ hex2int(unsigned char ch)
79
+ {
80
+ if (ch >= '0' && ch <= '9')
81
+ return ch - '0';
82
+ else if (ch >= 'A' && ch <= 'F')
83
+ return 10 + (ch - 'A');
84
+ else if (ch >= 'a' && ch <= 'f')
85
+ return 10 + (ch - 'a');
86
+ else
87
+ return 0;
88
+ }
89
+
90
+ static void
91
+ make_base64_dec_tab(void)
92
+ {
93
+ int i;
94
+ memset(base64_dec_tab, PACK_BASE64_IGNORE, sizeof(base64_dec_tab));
95
+ for (i = 0; i < 26; i++)
96
+ base64_dec_tab['A' + i] = i;
97
+ for (i = 0; i < 26; i++)
98
+ base64_dec_tab['a' + i] = i + 26;
99
+ for (i = 0; i < 10; i++)
100
+ base64_dec_tab['0' + i] = i + 52;
101
+ base64_dec_tab['+'] = 62;
102
+ base64_dec_tab['/'] = 63;
103
+ base64_dec_tab['='] = PACK_BASE64_PADDING;
104
+ }
105
+
106
+ static mrb_value
107
+ str_len_ensure(mrb_state *mrb, mrb_value str, mrb_int len)
108
+ {
109
+ mrb_int n = RSTRING_LEN(str);
110
+ if (len > n) {
111
+ do {
112
+ n *= 2;
113
+ } while (len > n);
114
+ str = mrb_str_resize(mrb, str, n);
115
+ }
116
+ return str;
117
+ }
118
+
119
+
120
+ static int
121
+ pack_c(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
122
+ {
123
+ str = str_len_ensure(mrb, str, sidx + 1);
124
+ RSTRING_PTR(str)[sidx] = (char)mrb_fixnum(o);
125
+ return 1;
126
+ }
127
+
128
+ static int
129
+ unpack_c(mrb_state *mrb, const void *src, int srclen, mrb_value ary, unsigned int flags)
130
+ {
131
+ if (flags & PACK_FLAG_SIGNED)
132
+ mrb_ary_push(mrb, ary, mrb_fixnum_value(*(signed char *)src));
133
+ else
134
+ mrb_ary_push(mrb, ary, mrb_fixnum_value(*(unsigned char *)src));
135
+ return 1;
136
+ }
137
+
138
+ static int
139
+ pack_s(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
140
+ {
141
+ uint16_t n;
142
+
143
+ str = str_len_ensure(mrb, str, sidx + 2);
144
+ n = (uint16_t)mrb_fixnum(o);
145
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
146
+ RSTRING_PTR(str)[sidx+0] = n % 256;
147
+ RSTRING_PTR(str)[sidx+1] = n / 256;
148
+ } else {
149
+ RSTRING_PTR(str)[sidx+0] = n / 256;
150
+ RSTRING_PTR(str)[sidx+1] = n % 256;
151
+ }
152
+ return 2;
153
+ }
154
+
155
+ static int
156
+ unpack_s(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
157
+ {
158
+ int n;
159
+
160
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
161
+ n = src[1] * 256 + src[0];
162
+ } else {
163
+ n = src[0] * 256 + src[1];
164
+ }
165
+ if ((flags & PACK_FLAG_SIGNED) && (n >= 0x8000)) {
166
+ n -= 0x10000;
167
+ }
168
+ mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
169
+ return 2;
170
+ }
171
+
172
+ static int
173
+ pack_l(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
174
+ {
175
+ uint32_t n;
176
+
177
+ str = str_len_ensure(mrb, str, sidx + 4);
178
+ n = (uint32_t)mrb_fixnum(o);
179
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
180
+ RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff);
181
+ RSTRING_PTR(str)[sidx+1] = (char)(n >> 8);
182
+ RSTRING_PTR(str)[sidx+2] = (char)(n >> 16);
183
+ RSTRING_PTR(str)[sidx+3] = (char)(n >> 24);
184
+ } else {
185
+ RSTRING_PTR(str)[sidx+0] = (char)(n >> 24);
186
+ RSTRING_PTR(str)[sidx+1] = (char)(n >> 16);
187
+ RSTRING_PTR(str)[sidx+2] = (char)(n >> 8);
188
+ RSTRING_PTR(str)[sidx+3] = (char)(n & 0xff);
189
+ }
190
+ return 4;
191
+ }
192
+
193
+ static int
194
+ unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
195
+ {
196
+ #ifndef MRB_INT64
197
+ char msg[60];
198
+ #endif
199
+ uint32_t ul;
200
+ mrb_int n;
201
+
202
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
203
+ ul = (uint32_t)src[3] * 256*256*256;
204
+ ul += (uint32_t)src[2] *256*256;
205
+ ul += (uint32_t)src[1] *256;
206
+ ul += (uint32_t)src[0];
207
+ } else {
208
+ ul = (uint32_t)src[0] * 256*256*256;
209
+ ul += (uint32_t)src[1] *256*256;
210
+ ul += (uint32_t)src[2] *256;
211
+ ul += (uint32_t)src[3];
212
+ }
213
+ if (flags & PACK_FLAG_SIGNED) {
214
+ int32_t sl = ul;
215
+ #ifndef MRB_INT64
216
+ if (!FIXABLE(sl)) {
217
+ snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %ld", (long)sl);
218
+ mrb_raise(mrb, E_RANGE_ERROR, msg);
219
+ }
220
+ #endif
221
+ n = sl;
222
+ } else {
223
+ #ifndef MRB_INT64
224
+ if (!POSFIXABLE(ul)) {
225
+ snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %lu", (unsigned long)ul);
226
+ mrb_raise(mrb, E_RANGE_ERROR, msg);
227
+ }
228
+ #endif
229
+ n = ul;
230
+ }
231
+ mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
232
+ return 4;
233
+ }
234
+
235
+ static int
236
+ pack_q(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
237
+ {
238
+ uint64_t n;
239
+
240
+ str = str_len_ensure(mrb, str, sidx + 8);
241
+ n = (uint64_t)mrb_fixnum(o);
242
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
243
+ RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff);
244
+ RSTRING_PTR(str)[sidx+1] = (char)(n >> 8);
245
+ RSTRING_PTR(str)[sidx+2] = (char)(n >> 16);
246
+ RSTRING_PTR(str)[sidx+3] = (char)(n >> 24);
247
+ RSTRING_PTR(str)[sidx+4] = (char)(n >> 32);
248
+ RSTRING_PTR(str)[sidx+5] = (char)(n >> 40);
249
+ RSTRING_PTR(str)[sidx+6] = (char)(n >> 48);
250
+ RSTRING_PTR(str)[sidx+7] = (char)(n >> 56);
251
+ } else {
252
+ RSTRING_PTR(str)[sidx+0] = (char)(n >> 56);
253
+ RSTRING_PTR(str)[sidx+1] = (char)(n >> 48);
254
+ RSTRING_PTR(str)[sidx+2] = (char)(n >> 40);
255
+ RSTRING_PTR(str)[sidx+3] = (char)(n >> 32);
256
+ RSTRING_PTR(str)[sidx+4] = (char)(n >> 24);
257
+ RSTRING_PTR(str)[sidx+5] = (char)(n >> 16);
258
+ RSTRING_PTR(str)[sidx+6] = (char)(n >> 8);
259
+ RSTRING_PTR(str)[sidx+7] = (char)(n & 0xff);
260
+ }
261
+ return 8;
262
+ }
263
+
264
+ static int
265
+ unpack_q(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
266
+ {
267
+ char msg[60];
268
+ uint64_t ull;
269
+ int i, pos, step;
270
+ mrb_int n;
271
+
272
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
273
+ pos = 7;
274
+ step = -1;
275
+ } else {
276
+ pos = 0;
277
+ step = 1;
278
+ }
279
+ ull = 0;
280
+ for (i = 0; i < 8; i++) {
281
+ ull = ull * 256 + (uint64_t)src[pos];
282
+ pos += step;
283
+ }
284
+ if (flags & PACK_FLAG_SIGNED) {
285
+ int64_t sll = ull;
286
+ if (!FIXABLE(sll)) {
287
+ snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %lld", (long long)sll);
288
+ mrb_raise(mrb, E_RANGE_ERROR, msg);
289
+ }
290
+ n = sll;
291
+ } else {
292
+ if (!POSFIXABLE(ull)) {
293
+ snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %llu", (unsigned long long)ull);
294
+ mrb_raise(mrb, E_RANGE_ERROR, msg);
295
+ }
296
+ n = ull;
297
+ }
298
+ mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
299
+ return 8;
300
+ }
301
+
302
+ #ifndef MRB_WITHOUT_FLOAT
303
+ static int
304
+ pack_double(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
305
+ {
306
+ int i;
307
+ double d;
308
+ uint8_t *buffer = (uint8_t *)&d;
309
+ str = str_len_ensure(mrb, str, sidx + 8);
310
+ d = mrb_float(o);
311
+
312
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
313
+ #ifdef MRB_ENDIAN_BIG
314
+ for (i = 0; i < 8; ++i) {
315
+ RSTRING_PTR(str)[sidx + i] = buffer[8 - i - 1];
316
+ }
317
+ #else
318
+ memcpy(RSTRING_PTR(str) + sidx, buffer, 8);
319
+ #endif
320
+ } else {
321
+ #ifdef MRB_ENDIAN_BIG
322
+ memcpy(RSTRING_PTR(str) + sidx, buffer, 8);
323
+ #else
324
+ for (i = 0; i < 8; ++i) {
325
+ RSTRING_PTR(str)[sidx + i] = buffer[8 - i - 1];
326
+ }
327
+ #endif
328
+ }
329
+
330
+ return 8;
331
+ }
332
+
333
+ static int
334
+ unpack_double(mrb_state *mrb, const unsigned char * src, int srclen, mrb_value ary, unsigned int flags)
335
+ {
336
+ int i;
337
+ double d;
338
+ uint8_t *buffer = (uint8_t *)&d;
339
+
340
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
341
+ #ifdef MRB_ENDIAN_BIG
342
+ for (i = 0; i < 8; ++i) {
343
+ buffer[8 - i - 1] = src[i];
344
+ }
345
+ #else
346
+ memcpy(buffer, src, 8);
347
+ #endif
348
+ } else {
349
+ #ifdef MRB_ENDIAN_BIG
350
+ memcpy(buffer, src, 8);
351
+ #else
352
+ for (i = 0; i < 8; ++i) {
353
+ buffer[8 - i - 1] = src[i];
354
+ }
355
+ #endif
356
+ }
357
+ mrb_ary_push(mrb, ary, mrb_float_value(mrb, d));
358
+
359
+ return 8;
360
+ }
361
+
362
+ static int
363
+ pack_float(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
364
+ {
365
+ int i;
366
+ float f;
367
+ uint8_t *buffer = (uint8_t *)&f;
368
+ str = str_len_ensure(mrb, str, sidx + 4);
369
+ f = (float)mrb_float(o);
370
+
371
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
372
+ #ifdef MRB_ENDIAN_BIG
373
+ for (i = 0; i < 4; ++i) {
374
+ RSTRING_PTR(str)[sidx + i] = buffer[4 - i - 1];
375
+ }
376
+ #else
377
+ memcpy(RSTRING_PTR(str) + sidx, buffer, 4);
378
+ #endif
379
+ } else {
380
+ #ifdef MRB_ENDIAN_BIG
381
+ memcpy(RSTRING_PTR(str) + sidx, buffer, 4);
382
+ #else
383
+ for (i = 0; i < 4; ++i) {
384
+ RSTRING_PTR(str)[sidx + i] = buffer[4 - i - 1];
385
+ }
386
+ #endif
387
+ }
388
+
389
+ return 4;
390
+ }
391
+
392
+ static int
393
+ unpack_float(mrb_state *mrb, const unsigned char * src, int srclen, mrb_value ary, unsigned int flags)
394
+ {
395
+ int i;
396
+ float f;
397
+ uint8_t *buffer = (uint8_t *)&f;
398
+
399
+ if (flags & PACK_FLAG_LITTLEENDIAN) {
400
+ #ifdef MRB_ENDIAN_BIG
401
+ for (i = 0; i < 4; ++i) {
402
+ buffer[4 - i - 1] = src[i];
403
+ }
404
+ #else
405
+ memcpy(buffer, src, 4);
406
+ #endif
407
+ } else {
408
+ #ifdef MRB_ENDIAN_BIG
409
+ memcpy(buffer, src, 4);
410
+ #else
411
+ for (i = 0; i < 4; ++i) {
412
+ buffer[4 - i - 1] = src[i];
413
+ }
414
+ #endif
415
+ }
416
+ mrb_ary_push(mrb, ary, mrb_float_value(mrb, f));
417
+
418
+ return 4;
419
+ }
420
+ #endif
421
+
422
+ static int
423
+ pack_utf8(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, long count, unsigned int flags)
424
+ {
425
+ char utf8[4];
426
+ int len = 0;
427
+ uint32_t c = 0;
428
+
429
+ #ifndef MRB_WITHOUT_FLOAT
430
+ if (mrb_float_p(o)) {
431
+ goto range_error;
432
+ }
433
+ #endif
434
+ c = (uint32_t)mrb_fixnum(o);
435
+
436
+ /* Unicode character */
437
+ /* from mruby-compiler gem */
438
+ if (c < 0x80) {
439
+ utf8[0] = (char)c;
440
+ len = 1;
441
+ }
442
+ else if (c < 0x800) {
443
+ utf8[0] = (char)(0xC0 | (c >> 6));
444
+ utf8[1] = (char)(0x80 | (c & 0x3F));
445
+ len = 2;
446
+ }
447
+ else if (c < 0x10000) {
448
+ utf8[0] = (char)(0xE0 | (c >> 12) );
449
+ utf8[1] = (char)(0x80 | ((c >> 6) & 0x3F));
450
+ utf8[2] = (char)(0x80 | ( c & 0x3F));
451
+ len = 3;
452
+ }
453
+ else if (c < 0x200000) {
454
+ utf8[0] = (char)(0xF0 | (c >> 18) );
455
+ utf8[1] = (char)(0x80 | ((c >> 12) & 0x3F));
456
+ utf8[2] = (char)(0x80 | ((c >> 6) & 0x3F));
457
+ utf8[3] = (char)(0x80 | ( c & 0x3F));
458
+ len = 4;
459
+ }
460
+ else {
461
+ #ifndef MRB_WITHOUT_FLOAT
462
+ range_error:
463
+ #endif
464
+ mrb_raise(mrb, E_RANGE_ERROR, "pack(U): value out of range");
465
+ }
466
+
467
+ str = str_len_ensure(mrb, str, sidx + len);
468
+ memcpy(RSTRING_PTR(str) + sidx, utf8, len);
469
+
470
+ return len;
471
+ }
472
+
473
+ static const unsigned long utf8_limits[] = {
474
+ 0x0, /* 1 */
475
+ 0x80, /* 2 */
476
+ 0x800, /* 3 */
477
+ 0x10000, /* 4 */
478
+ 0x200000, /* 5 */
479
+ 0x4000000, /* 6 */
480
+ 0x80000000, /* 7 */
481
+ };
482
+
483
+ static unsigned long
484
+ utf8_to_uv(mrb_state *mrb, const char *p, long *lenp)
485
+ {
486
+ int c = *p++ & 0xff;
487
+ unsigned long uv = c;
488
+ long n = 1;
489
+
490
+ if (!(uv & 0x80)) {
491
+ *lenp = 1;
492
+ return uv;
493
+ }
494
+ if (!(uv & 0x40)) {
495
+ *lenp = 1;
496
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character");
497
+ }
498
+
499
+ if (!(uv & 0x20)) { n = 2; uv &= 0x1f; }
500
+ else if (!(uv & 0x10)) { n = 3; uv &= 0x0f; }
501
+ else if (!(uv & 0x08)) { n = 4; uv &= 0x07; }
502
+ else if (!(uv & 0x04)) { n = 5; uv &= 0x03; }
503
+ else if (!(uv & 0x02)) { n = 6; uv &= 0x01; }
504
+ else {
505
+ *lenp = 1;
506
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character");
507
+ }
508
+ if (n > *lenp) {
509
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character (expected %S bytes, given %S bytes)",
510
+ mrb_fixnum_value(n), mrb_fixnum_value(*lenp));
511
+ }
512
+ *lenp = n--;
513
+ if (n != 0) {
514
+ while (n--) {
515
+ c = *p++ & 0xff;
516
+ if ((c & 0xc0) != 0x80) {
517
+ *lenp -= n + 1;
518
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed UTF-8 character");
519
+ }
520
+ else {
521
+ c &= 0x3f;
522
+ uv = uv << 6 | c;
523
+ }
524
+ }
525
+ }
526
+ n = *lenp - 1;
527
+ if (uv < utf8_limits[n]) {
528
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "redundant UTF-8 sequence");
529
+ }
530
+ return uv;
531
+ }
532
+
533
+ static int
534
+ unpack_utf8(mrb_state *mrb, const unsigned char * src, int srclen, mrb_value ary, unsigned int flags)
535
+ {
536
+ unsigned long uv;
537
+ long lenp = srclen;
538
+
539
+ if (srclen == 0) {
540
+ return 1;
541
+ }
542
+ uv = utf8_to_uv(mrb, (const char *)src, &lenp);
543
+ mrb_ary_push(mrb, ary, mrb_fixnum_value((mrb_int)uv));
544
+ return (int)lenp;
545
+ }
546
+
547
+ static int
548
+ pack_a(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
549
+ {
550
+ mrb_int copylen, slen, padlen;
551
+ char *dptr, *dptr0, pad, *sptr;
552
+
553
+ sptr = RSTRING_PTR(src);
554
+ slen = RSTRING_LEN(src);
555
+
556
+ if ((flags & PACK_FLAG_a) || (flags & PACK_FLAG_Z))
557
+ pad = '\0';
558
+ else
559
+ pad = ' ';
560
+
561
+ if (count == 0) {
562
+ return 0;
563
+ } else if (count == -1) {
564
+ copylen = slen;
565
+ padlen = (flags & PACK_FLAG_Z) ? 1 : 0;
566
+ } else if (count < slen) {
567
+ copylen = count;
568
+ padlen = 0;
569
+ } else {
570
+ copylen = slen;
571
+ padlen = count - slen;
572
+ }
573
+
574
+ dst = str_len_ensure(mrb, dst, didx + copylen + padlen);
575
+ dptr0 = dptr = RSTRING_PTR(dst) + didx;
576
+ memcpy(dptr, sptr, copylen);
577
+ dptr += copylen;
578
+ while (padlen-- > 0) {
579
+ *dptr++ = pad;
580
+ }
581
+
582
+ return (int)(dptr - dptr0);
583
+ }
584
+
585
+ static int
586
+ unpack_a(mrb_state *mrb, const void *src, int slen, mrb_value ary, long count, unsigned int flags)
587
+ {
588
+ mrb_value dst;
589
+ const char *cp, *sptr;
590
+ int copylen;
591
+
592
+ sptr = (const char *)src;
593
+ if (count != -1 && count < slen) {
594
+ slen = count;
595
+ }
596
+ copylen = slen;
597
+
598
+ if (flags & PACK_FLAG_Z) { /* "Z" */
599
+ if ((cp = (const char *)memchr(sptr, '\0', slen)) != NULL) {
600
+ copylen = (int)(cp - sptr);
601
+ if (count == -1) {
602
+ slen = copylen + 1;
603
+ }
604
+ }
605
+ } else if (!(flags & PACK_FLAG_a)) { /* "A" */
606
+ while (copylen > 0 && (sptr[copylen - 1] == '\0' || isspace(sptr[copylen - 1]))) {
607
+ copylen--;
608
+ }
609
+ }
610
+
611
+ dst = mrb_str_new(mrb, sptr, (mrb_int)copylen);
612
+ mrb_ary_push(mrb, ary, dst);
613
+ return slen;
614
+ }
615
+
616
+
617
+ static int
618
+ pack_h(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
619
+ {
620
+ unsigned int a, ashift, b, bshift;
621
+ long slen;
622
+ char *dptr, *dptr0, *sptr;
623
+
624
+ sptr = RSTRING_PTR(src);
625
+ slen = (long)RSTRING_LEN(src);
626
+
627
+ if (flags & PACK_FLAG_LSB) {
628
+ ashift = 0;
629
+ bshift = 4;
630
+ } else {
631
+ ashift = 4;
632
+ bshift = 0;
633
+ }
634
+
635
+ if (count == -1) {
636
+ count = slen;
637
+ } else if (slen > count) {
638
+ slen = count;
639
+ }
640
+
641
+ dst = str_len_ensure(mrb, dst, didx + count);
642
+ dptr = RSTRING_PTR(dst) + didx;
643
+
644
+ dptr0 = dptr;
645
+ for (; count > 0; count -= 2) {
646
+ a = b = 0;
647
+ if (slen > 0) {
648
+ a = hex2int(*sptr++);
649
+ slen--;
650
+ }
651
+ if (slen > 0) {
652
+ b = hex2int(*sptr++);
653
+ slen--;
654
+ }
655
+ *dptr++ = (a << ashift) + (b << bshift);
656
+ }
657
+
658
+ return (int)(dptr - dptr0);
659
+ }
660
+
661
+ static int
662
+ unpack_h(mrb_state *mrb, const void *src, int slen, mrb_value ary, int count, unsigned int flags)
663
+ {
664
+ mrb_value dst;
665
+ int a, ashift, b, bshift;
666
+ const char *sptr, *sptr0;
667
+ char *dptr, *dptr0;
668
+ const char hexadecimal[] = "0123456789abcdef";
669
+
670
+ if (flags & PACK_FLAG_LSB) {
671
+ ashift = 0;
672
+ bshift = 4;
673
+ } else {
674
+ ashift = 4;
675
+ bshift = 0;
676
+ }
677
+
678
+ sptr = (const char *)src;
679
+
680
+ if (count == -1)
681
+ count = slen * 2;
682
+
683
+ dst = mrb_str_new(mrb, NULL, count);
684
+ dptr = RSTRING_PTR(dst);
685
+
686
+ sptr0 = sptr;
687
+ dptr0 = dptr;
688
+ while (slen > 0 && count > 0) {
689
+ a = (*sptr >> ashift) & 0x0f;
690
+ b = (*sptr >> bshift) & 0x0f;
691
+ sptr++;
692
+ slen--;
693
+
694
+ *dptr++ = hexadecimal[a];
695
+ count--;
696
+
697
+ if (count > 0) {
698
+ *dptr++ = hexadecimal[b];
699
+ count--;
700
+ }
701
+ }
702
+
703
+ dst = mrb_str_resize(mrb, dst, dptr - dptr0);
704
+ mrb_ary_push(mrb, ary, dst);
705
+ return (int)(sptr - sptr0);
706
+ }
707
+
708
+
709
+ static int
710
+ pack_m(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
711
+ {
712
+ mrb_int dstlen;
713
+ unsigned long l;
714
+ mrb_int column, srclen;
715
+ char *srcptr, *dstptr, *dstptr0;
716
+
717
+ srcptr = RSTRING_PTR(src);
718
+ srclen = RSTRING_LEN(src);
719
+
720
+ if (srclen == 0) /* easy case */
721
+ return 0;
722
+
723
+ if (count != 0 && count < 3) { /* -1, 1 or 2 */
724
+ count = 45;
725
+ } else if (count >= 3) {
726
+ count -= count % 3;
727
+ }
728
+
729
+ dstlen = srclen / 3 * 4;
730
+ if (count > 0) {
731
+ dstlen += (srclen / count) + ((srclen % count) == 0 ? 0 : 1);
732
+ }
733
+ dst = str_len_ensure(mrb, dst, didx + dstlen);
734
+ dstptr = RSTRING_PTR(dst) + didx;
735
+
736
+ dstptr0 = dstptr;
737
+ for (column = 3; srclen >= 3; srclen -= 3, column += 3) {
738
+ l = (unsigned char)*srcptr++ << 16;
739
+ l += (unsigned char)*srcptr++ << 8;
740
+ l += (unsigned char)*srcptr++;
741
+
742
+ *dstptr++ = base64chars[(l >> 18) & 0x3f];
743
+ *dstptr++ = base64chars[(l >> 12) & 0x3f];
744
+ *dstptr++ = base64chars[(l >> 6) & 0x3f];
745
+ *dstptr++ = base64chars[ l & 0x3f];
746
+
747
+ if (column == count) {
748
+ *dstptr++ = '\n';
749
+ column = 0;
750
+ }
751
+ }
752
+ if (srclen == 1) {
753
+ l = (unsigned char)*srcptr++ << 16;
754
+ *dstptr++ = base64chars[(l >> 18) & 0x3f];
755
+ *dstptr++ = base64chars[(l >> 12) & 0x3f];
756
+ *dstptr++ = '=';
757
+ *dstptr++ = '=';
758
+ column += 3;
759
+ } else if (srclen == 2) {
760
+ l = (unsigned char)*srcptr++ << 16;
761
+ l += (unsigned char)*srcptr++ << 8;
762
+ *dstptr++ = base64chars[(l >> 18) & 0x3f];
763
+ *dstptr++ = base64chars[(l >> 12) & 0x3f];
764
+ *dstptr++ = base64chars[(l >> 6) & 0x3f];
765
+ *dstptr++ = '=';
766
+ column += 3;
767
+ }
768
+ if (column > 0 && count > 0) {
769
+ *dstptr++ = '\n';
770
+ }
771
+
772
+ return (int)(dstptr - dstptr0);
773
+ }
774
+
775
+ static int
776
+ unpack_m(mrb_state *mrb, const void *src, int slen, mrb_value ary, unsigned int flags)
777
+ {
778
+ mrb_value dst;
779
+ int dlen;
780
+ unsigned long l;
781
+ int i, padding;
782
+ unsigned char c, ch[4];
783
+ const char *sptr, *sptr0;
784
+ char *dptr, *dptr0;
785
+
786
+ sptr0 = sptr = (const char *)src;
787
+
788
+ dlen = slen / 4 * 3; /* an estimated value - may be shorter */
789
+ dst = mrb_str_new(mrb, NULL, dlen);
790
+ dptr0 = dptr = RSTRING_PTR(dst);
791
+
792
+ padding = 0;
793
+ while (slen >= 4) {
794
+ for (i = 0; i < 4; i++) {
795
+ do {
796
+ if (slen-- == 0)
797
+ goto done;
798
+ c = *sptr++;
799
+ if (c >= sizeof(base64_dec_tab))
800
+ continue;
801
+ ch[i] = base64_dec_tab[c];
802
+ if (ch[i] == PACK_BASE64_PADDING) {
803
+ ch[i] = 0;
804
+ padding++;
805
+ }
806
+ } while (ch[i] == PACK_BASE64_IGNORE);
807
+ }
808
+
809
+ l = (ch[0] << 18) + (ch[1] << 12) + (ch[2] << 6) + ch[3];
810
+
811
+ if (padding == 0) {
812
+ *dptr++ = (l >> 16) & 0xff;
813
+ *dptr++ = (l >> 8) & 0xff;
814
+ *dptr++ = l & 0xff;
815
+ } else if (padding == 1) {
816
+ *dptr++ = (l >> 16) & 0xff;
817
+ *dptr++ = (l >> 8) & 0xff;
818
+ break;
819
+ } else {
820
+ *dptr++ = (l >> 16) & 0xff;
821
+ break;
822
+ }
823
+ }
824
+
825
+ done:
826
+ dst = mrb_str_resize(mrb, dst, dptr - dptr0);
827
+ mrb_ary_push(mrb, ary, dst);
828
+ return (int)(sptr - sptr0);
829
+ }
830
+
831
+ static int
832
+ pack_x(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, long count, unsigned int flags)
833
+ {
834
+ long i;
835
+
836
+ dst = str_len_ensure(mrb, dst, didx + count);
837
+ for (i = 0; i < count; i++) {
838
+ RSTRING_PTR(dst)[didx] = '\0';
839
+ }
840
+ return count;
841
+ }
842
+
843
+ static int
844
+ unpack_x(mrb_state *mrb, const void *src, int slen, mrb_value ary, int count, unsigned int flags)
845
+ {
846
+ if (slen < count) {
847
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "x outside of string");
848
+ }
849
+ return count;
850
+ }
851
+
852
+ static void
853
+ prepare_tmpl(mrb_state *mrb, struct tmpl *tmpl)
854
+ {
855
+ mrb_get_args(mrb, "S", &tmpl->str);
856
+ tmpl->idx = 0;
857
+ }
858
+
859
+ static int
860
+ has_tmpl(const struct tmpl *tmpl)
861
+ {
862
+ return (tmpl->idx < RSTRING_LEN(tmpl->str));
863
+ }
864
+
865
+ static void
866
+ read_tmpl(mrb_state *mrb, struct tmpl *tmpl, int *dirp, int *typep, int *sizep, int *countp, unsigned int *flagsp)
867
+ {
868
+ mrb_int t, tlen;
869
+ int ch, dir, type, size = 0;
870
+ int count = 1;
871
+ unsigned int flags = 0;
872
+ const char *tptr;
873
+
874
+ tptr = RSTRING_PTR(tmpl->str);
875
+ tlen = RSTRING_LEN(tmpl->str);
876
+
877
+ t = tptr[tmpl->idx++];
878
+ alias:
879
+ switch (t) {
880
+ case 'A':
881
+ dir = PACK_DIR_STR;
882
+ type = PACK_TYPE_STRING;
883
+ flags |= PACK_FLAG_WIDTH | PACK_FLAG_COUNT2;
884
+ break;
885
+ case 'a':
886
+ dir = PACK_DIR_STR;
887
+ type = PACK_TYPE_STRING;
888
+ flags |= PACK_FLAG_WIDTH | PACK_FLAG_COUNT2 | PACK_FLAG_a;
889
+ break;
890
+ case 'C':
891
+ dir = PACK_DIR_CHAR;
892
+ type = PACK_TYPE_INTEGER;
893
+ size = 1;
894
+ break;
895
+ case 'c':
896
+ dir = PACK_DIR_CHAR;
897
+ type = PACK_TYPE_INTEGER;
898
+ size = 1;
899
+ flags |= PACK_FLAG_SIGNED;
900
+ break;
901
+ case 'D': case 'd':
902
+ dir = PACK_DIR_DOUBLE;
903
+ type = PACK_TYPE_FLOAT;
904
+ size = 8;
905
+ flags |= PACK_FLAG_SIGNED;
906
+ break;
907
+ case 'F': case 'f':
908
+ dir = PACK_DIR_FLOAT;
909
+ type = PACK_TYPE_FLOAT;
910
+ size = 4;
911
+ flags |= PACK_FLAG_SIGNED;
912
+ break;
913
+ case 'E':
914
+ dir = PACK_DIR_DOUBLE;
915
+ type = PACK_TYPE_FLOAT;
916
+ size = 8;
917
+ flags |= PACK_FLAG_SIGNED | PACK_FLAG_LT;
918
+ break;
919
+ case 'e':
920
+ dir = PACK_DIR_FLOAT;
921
+ type = PACK_TYPE_FLOAT;
922
+ size = 4;
923
+ flags |= PACK_FLAG_SIGNED | PACK_FLAG_LT;
924
+ break;
925
+ case 'G':
926
+ dir = PACK_DIR_DOUBLE;
927
+ type = PACK_TYPE_FLOAT;
928
+ size = 8;
929
+ flags |= PACK_FLAG_SIGNED | PACK_FLAG_GT;
930
+ break;
931
+ case 'g':
932
+ dir = PACK_DIR_FLOAT;
933
+ type = PACK_TYPE_FLOAT;
934
+ size = 4;
935
+ flags |= PACK_FLAG_SIGNED | PACK_FLAG_GT;
936
+ break;
937
+ case 'H':
938
+ dir = PACK_DIR_HEX;
939
+ type = PACK_TYPE_STRING;
940
+ flags |= PACK_FLAG_COUNT2;
941
+ break;
942
+ case 'h':
943
+ dir = PACK_DIR_HEX;
944
+ type = PACK_TYPE_STRING;
945
+ flags |= PACK_FLAG_COUNT2 | PACK_FLAG_LSB;
946
+ break;
947
+ case 'I':
948
+ switch (sizeof(int)) {
949
+ case 2: t = 'S'; goto alias;
950
+ case 4: t = 'L'; goto alias;
951
+ case 8: t = 'Q'; goto alias;
952
+ default:
953
+ mrb_raisef(mrb, E_RUNTIME_ERROR, "mruby-pack does not support sizeof(int) == %S", mrb_fixnum_value(sizeof(int)));
954
+ }
955
+ break;
956
+ case 'i':
957
+ switch (sizeof(int)) {
958
+ case 2: t = 's'; goto alias;
959
+ case 4: t = 'l'; goto alias;
960
+ case 8: t = 'q'; goto alias;
961
+ default:
962
+ mrb_raisef(mrb, E_RUNTIME_ERROR, "mruby-pack does not support sizeof(int) == %S", mrb_fixnum_value(sizeof(int)));
963
+ }
964
+ break;
965
+ case 'L':
966
+ dir = PACK_DIR_LONG;
967
+ type = PACK_TYPE_INTEGER;
968
+ size = 4;
969
+ break;
970
+ case 'l':
971
+ dir = PACK_DIR_LONG;
972
+ type = PACK_TYPE_INTEGER;
973
+ size = 4;
974
+ flags |= PACK_FLAG_SIGNED;
975
+ break;
976
+ case 'm':
977
+ dir = PACK_DIR_BASE64;
978
+ type = PACK_TYPE_STRING;
979
+ flags |= PACK_FLAG_WIDTH;
980
+ break;
981
+ case 'N': /* = "L>" */
982
+ dir = PACK_DIR_LONG;
983
+ type = PACK_TYPE_INTEGER;
984
+ size = 4;
985
+ flags |= PACK_FLAG_GT;
986
+ break;
987
+ case 'n': /* = "S>" */
988
+ dir = PACK_DIR_SHORT;
989
+ type = PACK_TYPE_INTEGER;
990
+ size = 2;
991
+ flags |= PACK_FLAG_GT;
992
+ break;
993
+ case 'Q':
994
+ dir = PACK_DIR_QUAD;
995
+ type = PACK_TYPE_INTEGER;
996
+ size = 8;
997
+ break;
998
+ case 'q':
999
+ dir = PACK_DIR_QUAD;
1000
+ type = PACK_TYPE_INTEGER;
1001
+ size = 8;
1002
+ flags |= PACK_FLAG_SIGNED;
1003
+ break;
1004
+ case 'S':
1005
+ dir = PACK_DIR_SHORT;
1006
+ type = PACK_TYPE_INTEGER;
1007
+ size = 2;
1008
+ break;
1009
+ case 's':
1010
+ dir = PACK_DIR_SHORT;
1011
+ type = PACK_TYPE_INTEGER;
1012
+ size = 2;
1013
+ flags |= PACK_FLAG_SIGNED;
1014
+ break;
1015
+ case 'U':
1016
+ dir = PACK_DIR_UTF8;
1017
+ type = PACK_TYPE_INTEGER;
1018
+ break;
1019
+ case 'V': /* = "L<" */
1020
+ dir = PACK_DIR_LONG;
1021
+ type = PACK_TYPE_INTEGER;
1022
+ size = 4;
1023
+ flags |= PACK_FLAG_LT;
1024
+ break;
1025
+ case 'v': /* = "S<" */
1026
+ dir = PACK_DIR_SHORT;
1027
+ type = PACK_TYPE_INTEGER;
1028
+ size = 2;
1029
+ flags |= PACK_FLAG_LT;
1030
+ break;
1031
+ case 'x':
1032
+ dir = PACK_DIR_NUL;
1033
+ type = PACK_TYPE_NONE;
1034
+ break;
1035
+ case 'Z':
1036
+ dir = PACK_DIR_STR;
1037
+ type = PACK_TYPE_STRING;
1038
+ flags |= PACK_FLAG_WIDTH | PACK_FLAG_COUNT2 | PACK_FLAG_Z;
1039
+ break;
1040
+ default:
1041
+ dir = PACK_DIR_INVALID;
1042
+ type = PACK_TYPE_NONE;
1043
+ break;
1044
+ }
1045
+
1046
+ /* read suffix [0-9*_!<>] */
1047
+ while (tmpl->idx < tlen) {
1048
+ ch = tptr[tmpl->idx++];
1049
+ if (isdigit(ch)) {
1050
+ count = ch - '0';
1051
+ while (tmpl->idx < tlen && isdigit(tptr[tmpl->idx])) {
1052
+ count = count * 10 + (tptr[tmpl->idx++] - '0');
1053
+ }
1054
+ continue; /* special case */
1055
+ } else if (ch == '*') {
1056
+ count = -1;
1057
+ } else if (ch == '_' || ch == '!' || ch == '<' || ch == '>') {
1058
+ if (strchr("sSiIlLqQ", (int)t) == NULL) {
1059
+ char ch_str = (char)ch;
1060
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "'%S' allowed only after types sSiIlLqQ", mrb_str_new(mrb, &ch_str, 1));
1061
+ }
1062
+ if (ch == '_' || ch == '!') {
1063
+ flags |= PACK_FLAG_s;
1064
+ } else if (ch == '<') {
1065
+ flags |= PACK_FLAG_LT;
1066
+ } else if (ch == '>') {
1067
+ flags |= PACK_FLAG_GT;
1068
+ }
1069
+ } else {
1070
+ tmpl->idx--;
1071
+ break;
1072
+ }
1073
+ }
1074
+
1075
+ if ((flags & PACK_FLAG_LT) || (!(flags & PACK_FLAG_GT) && littleendian)) {
1076
+ flags |= PACK_FLAG_LITTLEENDIAN;
1077
+ }
1078
+
1079
+ *dirp = dir;
1080
+ *typep = type;
1081
+ *sizep = size;
1082
+ *countp = count;
1083
+ *flagsp = flags;
1084
+ }
1085
+
1086
+ static mrb_value
1087
+ mrb_pack_pack(mrb_state *mrb, mrb_value ary)
1088
+ {
1089
+ mrb_value o, result;
1090
+ mrb_int aidx;
1091
+ struct tmpl tmpl;
1092
+ int count;
1093
+ unsigned int flags;
1094
+ int dir, ridx, size, type;
1095
+
1096
+ prepare_tmpl(mrb, &tmpl);
1097
+
1098
+ result = mrb_str_new(mrb, NULL, 128); /* allocate initial buffer */
1099
+ aidx = 0;
1100
+ ridx = 0;
1101
+ while (has_tmpl(&tmpl)) {
1102
+ read_tmpl(mrb, &tmpl, &dir, &type, &size, &count, &flags);
1103
+
1104
+ if (dir == PACK_DIR_INVALID)
1105
+ continue;
1106
+ else if (dir == PACK_DIR_NUL) {
1107
+ ridx += pack_x(mrb, mrb_nil_value(), result, ridx, count, flags);
1108
+ continue;
1109
+ }
1110
+
1111
+ for (; aidx < RARRAY_LEN(ary); aidx++) {
1112
+ if (count == 0 && !(flags & PACK_FLAG_WIDTH))
1113
+ break;
1114
+
1115
+ o = mrb_ary_ref(mrb, ary, aidx);
1116
+ if (type == PACK_TYPE_INTEGER) {
1117
+ o = mrb_to_int(mrb, o);
1118
+ #ifndef MRB_WITHOUT_FLOAT
1119
+ } else if (type == PACK_TYPE_FLOAT) {
1120
+ if (!mrb_float_p(o)) {
1121
+ o = mrb_funcall(mrb, o, "to_f", 0);
1122
+ }
1123
+ #endif
1124
+ } else if (type == PACK_TYPE_STRING) {
1125
+ if (!mrb_string_p(o)) {
1126
+ mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S into String", mrb_class_path(mrb, mrb_obj_class(mrb, o)));
1127
+ }
1128
+ }
1129
+
1130
+ switch (dir) {
1131
+ case PACK_DIR_CHAR:
1132
+ ridx += pack_c(mrb, o, result, ridx, flags);
1133
+ break;
1134
+ case PACK_DIR_SHORT:
1135
+ ridx += pack_s(mrb, o, result, ridx, flags);
1136
+ break;
1137
+ case PACK_DIR_LONG:
1138
+ ridx += pack_l(mrb, o, result, ridx, flags);
1139
+ break;
1140
+ case PACK_DIR_QUAD:
1141
+ ridx += pack_q(mrb, o, result, ridx, flags);
1142
+ break;
1143
+ case PACK_DIR_BASE64:
1144
+ ridx += pack_m(mrb, o, result, ridx, count, flags);
1145
+ break;
1146
+ case PACK_DIR_HEX:
1147
+ ridx += pack_h(mrb, o, result, ridx, count, flags);
1148
+ break;
1149
+ case PACK_DIR_STR:
1150
+ ridx += pack_a(mrb, o, result, ridx, count, flags);
1151
+ break;
1152
+ #ifndef MRB_WITHOUT_FLOAT
1153
+ case PACK_DIR_DOUBLE:
1154
+ ridx += pack_double(mrb, o, result, ridx, flags);
1155
+ break;
1156
+ case PACK_DIR_FLOAT:
1157
+ ridx += pack_float(mrb, o, result, ridx, flags);
1158
+ break;
1159
+ #endif
1160
+ case PACK_DIR_UTF8:
1161
+ ridx += pack_utf8(mrb, o, result, ridx, count, flags);
1162
+ break;
1163
+ default:
1164
+ break;
1165
+ }
1166
+ if (dir == PACK_DIR_STR) { /* always consumes 1 entry */
1167
+ aidx++;
1168
+ break;
1169
+ }
1170
+ if (count > 0) {
1171
+ count--;
1172
+ }
1173
+ }
1174
+ }
1175
+
1176
+ mrb_str_resize(mrb, result, ridx);
1177
+ return result;
1178
+ }
1179
+
1180
+ static mrb_value
1181
+ mrb_pack_unpack(mrb_state *mrb, mrb_value str)
1182
+ {
1183
+ mrb_value result;
1184
+ struct tmpl tmpl;
1185
+ int count;
1186
+ unsigned int flags;
1187
+ int dir, size, type;
1188
+ int srcidx, srclen;
1189
+ const unsigned char *sptr;
1190
+
1191
+ prepare_tmpl(mrb, &tmpl);
1192
+
1193
+ srcidx = 0;
1194
+ srclen = (int)RSTRING_LEN(str);
1195
+
1196
+ result = mrb_ary_new(mrb);
1197
+ while (has_tmpl(&tmpl)) {
1198
+ read_tmpl(mrb, &tmpl, &dir, &type, &size, &count, &flags);
1199
+
1200
+ if (dir == PACK_DIR_INVALID)
1201
+ continue;
1202
+ else if (dir == PACK_DIR_NUL) {
1203
+ srcidx += unpack_x(mrb, sptr, srclen - srcidx, result, count, flags);
1204
+ continue;
1205
+ }
1206
+
1207
+ if (flags & PACK_FLAG_COUNT2) {
1208
+ sptr = (const unsigned char *)RSTRING_PTR(str) + srcidx;
1209
+ switch (dir) {
1210
+ case PACK_DIR_HEX:
1211
+ srcidx += unpack_h(mrb, sptr, srclen - srcidx, result, count, flags);
1212
+ break;
1213
+ case PACK_DIR_STR:
1214
+ srcidx += unpack_a(mrb, sptr, srclen - srcidx, result, count, flags);
1215
+ break;
1216
+ }
1217
+ continue;
1218
+ }
1219
+
1220
+ while (count != 0) {
1221
+ if (srclen - srcidx < size) {
1222
+ while (count-- > 0) {
1223
+ mrb_ary_push(mrb, result, mrb_nil_value());
1224
+ }
1225
+ break;
1226
+ }
1227
+
1228
+ sptr = (const unsigned char*)RSTRING_PTR(str) + srcidx;
1229
+ switch (dir) {
1230
+ case PACK_DIR_CHAR:
1231
+ srcidx += unpack_c(mrb, sptr, srclen - srcidx, result, flags);
1232
+ break;
1233
+ case PACK_DIR_SHORT:
1234
+ srcidx += unpack_s(mrb, sptr, srclen - srcidx, result, flags);
1235
+ break;
1236
+ case PACK_DIR_LONG:
1237
+ srcidx += unpack_l(mrb, sptr, srclen - srcidx, result, flags);
1238
+ break;
1239
+ case PACK_DIR_QUAD:
1240
+ srcidx += unpack_q(mrb, sptr, srclen - srcidx, result, flags);
1241
+ break;
1242
+ case PACK_DIR_BASE64:
1243
+ srcidx += unpack_m(mrb, sptr, srclen - srcidx, result, flags);
1244
+ break;
1245
+ #ifndef MRB_WITHOUT_FLOAT
1246
+ case PACK_DIR_FLOAT:
1247
+ srcidx += unpack_float(mrb, sptr, srclen - srcidx, result, flags);
1248
+ break;
1249
+ case PACK_DIR_DOUBLE:
1250
+ srcidx += unpack_double(mrb, sptr, srclen - srcidx, result, flags);
1251
+ break;
1252
+ #endif
1253
+ case PACK_DIR_UTF8:
1254
+ srcidx += unpack_utf8(mrb, sptr, srclen - srcidx, result, flags);
1255
+ break;
1256
+ default:
1257
+ mrb_raise(mrb, E_RUNTIME_ERROR, "mruby-pack's bug");
1258
+ }
1259
+ if (count > 0) {
1260
+ count--;
1261
+ }
1262
+ }
1263
+ }
1264
+
1265
+ return result;
1266
+ }
1267
+
1268
+ void
1269
+ mrb_mruby_pack_gem_init(mrb_state *mrb)
1270
+ {
1271
+ littleendian = check_little_endian();
1272
+ make_base64_dec_tab();
1273
+
1274
+ mrb_define_method(mrb, mrb->array_class, "pack", mrb_pack_pack, MRB_ARGS_REQ(1));
1275
+ mrb_define_method(mrb, mrb->string_class, "unpack", mrb_pack_unpack, MRB_ARGS_REQ(1));
1276
+ }
1277
+
1278
+ void
1279
+ mrb_mruby_pack_gem_final(mrb_state *mrb)
1280
+ {
1281
+ }