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,20 @@
1
+ MRuby.each_target do
2
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
3
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
4
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
5
+
6
+ objs = Dir.glob("#{current_dir}/*.c").map { |f|
7
+ next nil if cxx_exception_enabled? and f =~ /(error|vm).c$/
8
+ next nil if self.cc.defines.flatten.include?("MRB_WITHOUT_FLOAT") and f =~ /fmt_fp.c$/
9
+ objfile(f.pathmap("#{current_build_dir}/%n"))
10
+ }.compact
11
+
12
+ if cxx_exception_enabled?
13
+ objs += %w(vm error).map { |v| compile_as_cxx "#{current_dir}/#{v}.c", "#{current_build_dir}/#{v}.cxx" }
14
+ end
15
+ self.libmruby << objs
16
+
17
+ file libfile("#{build_dir}/lib/libmruby_core") => objs do |t|
18
+ archiver.run t.name, t.prerequisites
19
+ end
20
+ end
@@ -0,0 +1,1574 @@
1
+ /*
2
+ ** numeric.c - Numeric, Integer, Float, Fixnum class
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #ifndef MRB_WITHOUT_FLOAT
8
+ #include <float.h>
9
+ #include <math.h>
10
+ #endif
11
+ #include <limits.h>
12
+ #include <stdlib.h>
13
+
14
+ #include <mruby.h>
15
+ #include <mruby/array.h>
16
+ #include <mruby/numeric.h>
17
+ #include <mruby/string.h>
18
+ #include <mruby/class.h>
19
+
20
+ #ifndef MRB_WITHOUT_FLOAT
21
+ #ifdef MRB_USE_FLOAT
22
+ #define trunc(f) truncf(f)
23
+ #define floor(f) floorf(f)
24
+ #define ceil(f) ceilf(f)
25
+ #define fmod(x,y) fmodf(x,y)
26
+ #define MRB_FLO_TO_STR_FMT "%.7g"
27
+ #else
28
+ #define MRB_FLO_TO_STR_FMT "%.14g"
29
+ #endif
30
+ #endif
31
+
32
+ #ifndef MRB_WITHOUT_FLOAT
33
+ MRB_API mrb_float
34
+ mrb_to_flo(mrb_state *mrb, mrb_value val)
35
+ {
36
+ switch (mrb_type(val)) {
37
+ case MRB_TT_FIXNUM:
38
+ return (mrb_float)mrb_fixnum(val);
39
+ case MRB_TT_FLOAT:
40
+ break;
41
+ default:
42
+ mrb_raise(mrb, E_TYPE_ERROR, "non float value");
43
+ }
44
+ return mrb_float(val);
45
+ }
46
+ #endif
47
+
48
+ /*
49
+ * call-seq:
50
+ *
51
+ * num ** other -> num
52
+ *
53
+ * Raises <code>num</code> the <code>other</code> power.
54
+ *
55
+ * 2.0**3 #=> 8.0
56
+ */
57
+ static mrb_value
58
+ num_pow(mrb_state *mrb, mrb_value x)
59
+ {
60
+ mrb_value y;
61
+ #ifndef MRB_WITHOUT_FLOAT
62
+ mrb_float d;
63
+ #endif
64
+
65
+ mrb_get_args(mrb, "o", &y);
66
+ if (mrb_fixnum_p(x) && mrb_fixnum_p(y)) {
67
+ /* try ipow() */
68
+ mrb_int base = mrb_fixnum(x);
69
+ mrb_int exp = mrb_fixnum(y);
70
+ mrb_int result = 1;
71
+
72
+ if (exp < 0)
73
+ #ifdef MRB_WITHOUT_FLOAT
74
+ return mrb_fixnum_value(0);
75
+ #else
76
+ goto float_pow;
77
+ #endif
78
+ for (;;) {
79
+ if (exp & 1) {
80
+ if (mrb_int_mul_overflow(result, base, &result)) {
81
+ #ifndef MRB_WITHOUT_FLOAT
82
+ goto float_pow;
83
+ #endif
84
+ }
85
+ }
86
+ exp >>= 1;
87
+ if (exp == 0) break;
88
+ if (mrb_int_mul_overflow(base, base, &base)) {
89
+ #ifndef MRB_WITHOUT_FLOAT
90
+ goto float_pow;
91
+ #endif
92
+ }
93
+ }
94
+ return mrb_fixnum_value(result);
95
+ }
96
+ #ifdef MRB_WITHOUT_FLOAT
97
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
98
+ #else
99
+ float_pow:
100
+ d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y));
101
+ return mrb_float_value(mrb, d);
102
+ #endif
103
+ }
104
+
105
+ /* 15.2.8.3.4 */
106
+ /* 15.2.9.3.4 */
107
+ /*
108
+ * call-seq:
109
+ * num / other -> num
110
+ *
111
+ * Performs division: the class of the resulting object depends on
112
+ * the class of <code>num</code> and on the magnitude of the
113
+ * result.
114
+ */
115
+
116
+ mrb_value
117
+ mrb_num_div(mrb_state *mrb, mrb_value x, mrb_value y)
118
+ {
119
+ #ifdef MRB_WITHOUT_FLOAT
120
+ if (!mrb_fixnum_p(y)) {
121
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
122
+ }
123
+ return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
124
+ #else
125
+ return mrb_float_value(mrb, mrb_to_flo(mrb, x) / mrb_to_flo(mrb, y));
126
+ #endif
127
+ }
128
+
129
+ /* 15.2.9.3.19(x) */
130
+ /*
131
+ * call-seq:
132
+ * num.quo(numeric) -> real
133
+ *
134
+ * Returns most exact division.
135
+ */
136
+
137
+ static mrb_value
138
+ num_div(mrb_state *mrb, mrb_value x)
139
+ {
140
+ #ifdef MRB_WITHOUT_FLOAT
141
+ mrb_value y;
142
+
143
+ mrb_get_args(mrb, "o", &y);
144
+ if (!mrb_fixnum_p(y)) {
145
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
146
+ }
147
+ return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
148
+ #else
149
+ mrb_float y;
150
+
151
+ mrb_get_args(mrb, "f", &y);
152
+ return mrb_float_value(mrb, mrb_to_flo(mrb, x) / y);
153
+ #endif
154
+ }
155
+
156
+ #ifndef MRB_WITHOUT_FLOAT
157
+ /********************************************************************
158
+ *
159
+ * Document-class: Float
160
+ *
161
+ * <code>Float</code> objects represent inexact real numbers using
162
+ * the native architecture's double-precision floating point
163
+ * representation.
164
+ */
165
+
166
+ /* 15.2.9.3.16(x) */
167
+ /*
168
+ * call-seq:
169
+ * flt.to_s -> string
170
+ *
171
+ * Returns a string containing a representation of self. As well as a
172
+ * fixed or exponential form of the number, the call may return
173
+ * "<code>NaN</code>", "<code>Infinity</code>", and
174
+ * "<code>-Infinity</code>".
175
+ */
176
+
177
+ static mrb_value
178
+ flo_to_s(mrb_state *mrb, mrb_value flt)
179
+ {
180
+ if (isnan(mrb_float(flt))) {
181
+ return mrb_str_new_lit(mrb, "NaN");
182
+ }
183
+ return mrb_float_to_str(mrb, flt, MRB_FLO_TO_STR_FMT);
184
+ }
185
+
186
+ /* 15.2.9.3.2 */
187
+ /*
188
+ * call-seq:
189
+ * float - other -> float
190
+ *
191
+ * Returns a new float which is the difference of <code>float</code>
192
+ * and <code>other</code>.
193
+ */
194
+
195
+ static mrb_value
196
+ flo_minus(mrb_state *mrb, mrb_value x)
197
+ {
198
+ mrb_value y;
199
+
200
+ mrb_get_args(mrb, "o", &y);
201
+ return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
202
+ }
203
+
204
+ /* 15.2.9.3.3 */
205
+ /*
206
+ * call-seq:
207
+ * float * other -> float
208
+ *
209
+ * Returns a new float which is the product of <code>float</code>
210
+ * and <code>other</code>.
211
+ */
212
+
213
+ static mrb_value
214
+ flo_mul(mrb_state *mrb, mrb_value x)
215
+ {
216
+ mrb_value y;
217
+
218
+ mrb_get_args(mrb, "o", &y);
219
+ return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
220
+ }
221
+
222
+ static void
223
+ flodivmod(mrb_state *mrb, mrb_float x, mrb_float y, mrb_float *divp, mrb_float *modp)
224
+ {
225
+ mrb_float div;
226
+ mrb_float mod;
227
+
228
+ if (y == 0.0) {
229
+ if (x > 0.0) div = INFINITY;
230
+ else if (x < 0.0) div = -INFINITY;
231
+ else div = NAN; /* x == 0.0 */
232
+ mod = NAN;
233
+ }
234
+ else {
235
+ mod = fmod(x, y);
236
+ if (isinf(x) && isfinite(y))
237
+ div = x;
238
+ else
239
+ div = (x - mod) / y;
240
+ if (y*mod < 0) {
241
+ mod += y;
242
+ div -= 1.0;
243
+ }
244
+ }
245
+
246
+ if (modp) *modp = mod;
247
+ if (divp) *divp = div;
248
+ }
249
+
250
+ /* 15.2.9.3.5 */
251
+ /*
252
+ * call-seq:
253
+ * flt % other -> float
254
+ * flt.modulo(other) -> float
255
+ *
256
+ * Return the modulo after division of <code>flt</code> by <code>other</code>.
257
+ *
258
+ * 6543.21.modulo(137) #=> 104.21
259
+ * 6543.21.modulo(137.24) #=> 92.9299999999996
260
+ */
261
+
262
+ static mrb_value
263
+ flo_mod(mrb_state *mrb, mrb_value x)
264
+ {
265
+ mrb_value y;
266
+ mrb_float mod;
267
+
268
+ mrb_get_args(mrb, "o", &y);
269
+
270
+ flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), 0, &mod);
271
+ return mrb_float_value(mrb, mod);
272
+ }
273
+ #endif
274
+
275
+ /* 15.2.8.3.16 */
276
+ /*
277
+ * call-seq:
278
+ * num.eql?(numeric) -> true or false
279
+ *
280
+ * Returns <code>true</code> if <i>num</i> and <i>numeric</i> are the
281
+ * same type and have equal values.
282
+ *
283
+ * 1 == 1.0 #=> true
284
+ * 1.eql?(1.0) #=> false
285
+ * (1.0).eql?(1.0) #=> true
286
+ */
287
+ static mrb_value
288
+ fix_eql(mrb_state *mrb, mrb_value x)
289
+ {
290
+ mrb_value y;
291
+
292
+ mrb_get_args(mrb, "o", &y);
293
+ if (!mrb_fixnum_p(y)) return mrb_false_value();
294
+ return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y));
295
+ }
296
+
297
+ #ifndef MRB_WITHOUT_FLOAT
298
+ static mrb_value
299
+ flo_eql(mrb_state *mrb, mrb_value x)
300
+ {
301
+ mrb_value y;
302
+
303
+ mrb_get_args(mrb, "o", &y);
304
+ if (!mrb_float_p(y)) return mrb_false_value();
305
+ return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_fixnum(y));
306
+ }
307
+
308
+ /* 15.2.9.3.7 */
309
+ /*
310
+ * call-seq:
311
+ * flt == obj -> true or false
312
+ *
313
+ * Returns <code>true</code> only if <i>obj</i> has the same value
314
+ * as <i>flt</i>. Contrast this with <code>Float#eql?</code>, which
315
+ * requires <i>obj</i> to be a <code>Float</code>.
316
+ *
317
+ * 1.0 == 1 #=> true
318
+ *
319
+ */
320
+
321
+ static mrb_value
322
+ flo_eq(mrb_state *mrb, mrb_value x)
323
+ {
324
+ mrb_value y;
325
+ mrb_get_args(mrb, "o", &y);
326
+
327
+ switch (mrb_type(y)) {
328
+ case MRB_TT_FIXNUM:
329
+ return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_fixnum(y));
330
+ case MRB_TT_FLOAT:
331
+ return mrb_bool_value(mrb_float(x) == mrb_float(y));
332
+ default:
333
+ return mrb_false_value();
334
+ }
335
+ }
336
+
337
+ static int64_t
338
+ value_int64(mrb_state *mrb, mrb_value x)
339
+ {
340
+ switch (mrb_type(x)) {
341
+ case MRB_TT_FIXNUM:
342
+ return (int64_t)mrb_fixnum(x);
343
+ break;
344
+ case MRB_TT_FLOAT:
345
+ return (int64_t)mrb_float(x);
346
+ default:
347
+ mrb_raise(mrb, E_TYPE_ERROR, "cannot convert to Integer");
348
+ break;
349
+ }
350
+ /* not reached */
351
+ return 0;
352
+ }
353
+
354
+ static mrb_value
355
+ int64_value(mrb_state *mrb, int64_t v)
356
+ {
357
+ if (FIXABLE(v)) {
358
+ return mrb_fixnum_value((mrb_int)v);
359
+ }
360
+ return mrb_float_value(mrb, (mrb_float)v);
361
+ }
362
+
363
+ static mrb_value
364
+ flo_rev(mrb_state *mrb, mrb_value x)
365
+ {
366
+ int64_t v1;
367
+ mrb_get_args(mrb, "");
368
+ v1 = (int64_t)mrb_float(x);
369
+ return int64_value(mrb, ~v1);
370
+ }
371
+
372
+ static mrb_value
373
+ flo_and(mrb_state *mrb, mrb_value x)
374
+ {
375
+ mrb_value y;
376
+ int64_t v1, v2;
377
+ mrb_get_args(mrb, "o", &y);
378
+
379
+ v1 = (int64_t)mrb_float(x);
380
+ v2 = value_int64(mrb, y);
381
+ return int64_value(mrb, v1 & v2);
382
+ }
383
+
384
+ static mrb_value
385
+ flo_or(mrb_state *mrb, mrb_value x)
386
+ {
387
+ mrb_value y;
388
+ int64_t v1, v2;
389
+ mrb_get_args(mrb, "o", &y);
390
+
391
+ v1 = (int64_t)mrb_float(x);
392
+ v2 = value_int64(mrb, y);
393
+ return int64_value(mrb, v1 | v2);
394
+ }
395
+
396
+ static mrb_value
397
+ flo_xor(mrb_state *mrb, mrb_value x)
398
+ {
399
+ mrb_value y;
400
+ int64_t v1, v2;
401
+ mrb_get_args(mrb, "o", &y);
402
+
403
+ v1 = (int64_t)mrb_float(x);
404
+ v2 = value_int64(mrb, y);
405
+ return int64_value(mrb, v1 ^ v2);
406
+ }
407
+
408
+ static mrb_value
409
+ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
410
+ {
411
+ mrb_float val;
412
+
413
+ if (width == 0) {
414
+ return x;
415
+ }
416
+ val = mrb_float(x);
417
+ if (width < 0) {
418
+ while (width++) {
419
+ val /= 2;
420
+ }
421
+ #if defined(_ISOC99_SOURCE)
422
+ val = trunc(val);
423
+ #else
424
+ if (val > 0){
425
+ val = floor(val);
426
+ } else {
427
+ val = ceil(val);
428
+ }
429
+ #endif
430
+ if (val == 0 && mrb_float(x) < 0) {
431
+ return mrb_fixnum_value(-1);
432
+ }
433
+ }
434
+ else {
435
+ while (width--) {
436
+ val *= 2;
437
+ }
438
+ }
439
+ if (FIXABLE_FLOAT(val)) {
440
+ return mrb_fixnum_value((mrb_int)val);
441
+ }
442
+ return mrb_float_value(mrb, val);
443
+ }
444
+
445
+ static mrb_value
446
+ flo_lshift(mrb_state *mrb, mrb_value x)
447
+ {
448
+ mrb_int width;
449
+
450
+ mrb_get_args(mrb, "i", &width);
451
+ return flo_shift(mrb, x, -width);
452
+ }
453
+
454
+ static mrb_value
455
+ flo_rshift(mrb_state *mrb, mrb_value x)
456
+ {
457
+ mrb_int width;
458
+
459
+ mrb_get_args(mrb, "i", &width);
460
+ return flo_shift(mrb, x, width);
461
+ }
462
+
463
+ /* 15.2.9.3.13 */
464
+ /*
465
+ * call-seq:
466
+ * flt.to_f -> self
467
+ *
468
+ * As <code>flt</code> is already a float, returns +self+.
469
+ */
470
+
471
+ static mrb_value
472
+ flo_to_f(mrb_state *mrb, mrb_value num)
473
+ {
474
+ return num;
475
+ }
476
+
477
+ /* 15.2.9.3.11 */
478
+ /*
479
+ * call-seq:
480
+ * flt.infinite? -> nil, -1, +1
481
+ *
482
+ * Returns <code>nil</code>, -1, or +1 depending on whether <i>flt</i>
483
+ * is finite, -infinity, or +infinity.
484
+ *
485
+ * (0.0).infinite? #=> nil
486
+ * (-1.0/0.0).infinite? #=> -1
487
+ * (+1.0/0.0).infinite? #=> 1
488
+ */
489
+
490
+ static mrb_value
491
+ flo_infinite_p(mrb_state *mrb, mrb_value num)
492
+ {
493
+ mrb_float value = mrb_float(num);
494
+
495
+ if (isinf(value)) {
496
+ return mrb_fixnum_value(value < 0 ? -1 : 1);
497
+ }
498
+ return mrb_nil_value();
499
+ }
500
+
501
+ /* 15.2.9.3.9 */
502
+ /*
503
+ * call-seq:
504
+ * flt.finite? -> true or false
505
+ *
506
+ * Returns <code>true</code> if <i>flt</i> is a valid IEEE floating
507
+ * point number (it is not infinite, and <code>nan?</code> is
508
+ * <code>false</code>).
509
+ *
510
+ */
511
+
512
+ static mrb_value
513
+ flo_finite_p(mrb_state *mrb, mrb_value num)
514
+ {
515
+ return mrb_bool_value(isfinite(mrb_float(num)));
516
+ }
517
+
518
+ void
519
+ mrb_check_num_exact(mrb_state *mrb, mrb_float num)
520
+ {
521
+ if (isinf(num)) {
522
+ mrb_raise(mrb, E_FLOATDOMAIN_ERROR, num < 0 ? "-Infinity" : "Infinity");
523
+ }
524
+ if (isnan(num)) {
525
+ mrb_raise(mrb, E_FLOATDOMAIN_ERROR, "NaN");
526
+ }
527
+ }
528
+
529
+ /* 15.2.9.3.10 */
530
+ /*
531
+ * call-seq:
532
+ * flt.floor -> integer
533
+ *
534
+ * Returns the largest integer less than or equal to <i>flt</i>.
535
+ *
536
+ * 1.2.floor #=> 1
537
+ * 2.0.floor #=> 2
538
+ * (-1.2).floor #=> -2
539
+ * (-2.0).floor #=> -2
540
+ */
541
+
542
+ static mrb_value
543
+ flo_floor(mrb_state *mrb, mrb_value num)
544
+ {
545
+ mrb_float f = floor(mrb_float(num));
546
+
547
+ mrb_check_num_exact(mrb, f);
548
+ if (!FIXABLE_FLOAT(f)) {
549
+ return mrb_float_value(mrb, f);
550
+ }
551
+ return mrb_fixnum_value((mrb_int)f);
552
+ }
553
+
554
+ /* 15.2.9.3.8 */
555
+ /*
556
+ * call-seq:
557
+ * flt.ceil -> integer
558
+ *
559
+ * Returns the smallest <code>Integer</code> greater than or equal to
560
+ * <i>flt</i>.
561
+ *
562
+ * 1.2.ceil #=> 2
563
+ * 2.0.ceil #=> 2
564
+ * (-1.2).ceil #=> -1
565
+ * (-2.0).ceil #=> -2
566
+ */
567
+
568
+ static mrb_value
569
+ flo_ceil(mrb_state *mrb, mrb_value num)
570
+ {
571
+ mrb_float f = ceil(mrb_float(num));
572
+
573
+ mrb_check_num_exact(mrb, f);
574
+ if (!FIXABLE_FLOAT(f)) {
575
+ return mrb_float_value(mrb, f);
576
+ }
577
+ return mrb_fixnum_value((mrb_int)f);
578
+ }
579
+
580
+ /* 15.2.9.3.12 */
581
+ /*
582
+ * call-seq:
583
+ * flt.round([ndigits]) -> integer or float
584
+ *
585
+ * Rounds <i>flt</i> to a given precision in decimal digits (default 0 digits).
586
+ * Precision may be negative. Returns a floating point number when ndigits
587
+ * is more than zero.
588
+ *
589
+ * 1.4.round #=> 1
590
+ * 1.5.round #=> 2
591
+ * 1.6.round #=> 2
592
+ * (-1.5).round #=> -2
593
+ *
594
+ * 1.234567.round(2) #=> 1.23
595
+ * 1.234567.round(3) #=> 1.235
596
+ * 1.234567.round(4) #=> 1.2346
597
+ * 1.234567.round(5) #=> 1.23457
598
+ *
599
+ * 34567.89.round(-5) #=> 0
600
+ * 34567.89.round(-4) #=> 30000
601
+ * 34567.89.round(-3) #=> 35000
602
+ * 34567.89.round(-2) #=> 34600
603
+ * 34567.89.round(-1) #=> 34570
604
+ * 34567.89.round(0) #=> 34568
605
+ * 34567.89.round(1) #=> 34567.9
606
+ * 34567.89.round(2) #=> 34567.89
607
+ * 34567.89.round(3) #=> 34567.89
608
+ *
609
+ */
610
+
611
+ static mrb_value
612
+ flo_round(mrb_state *mrb, mrb_value num)
613
+ {
614
+ double number, f;
615
+ mrb_int ndigits = 0;
616
+ mrb_int i;
617
+
618
+ mrb_get_args(mrb, "|i", &ndigits);
619
+ number = mrb_float(num);
620
+
621
+ if (0 < ndigits && (isinf(number) || isnan(number))) {
622
+ return num;
623
+ }
624
+ mrb_check_num_exact(mrb, number);
625
+
626
+ f = 1.0;
627
+ i = ndigits >= 0 ? ndigits : -ndigits;
628
+ while (--i >= 0)
629
+ f = f*10.0;
630
+
631
+ if (isinf(f)) {
632
+ if (ndigits < 0) number = 0;
633
+ }
634
+ else {
635
+ double d;
636
+
637
+ if (ndigits < 0) number /= f;
638
+ else number *= f;
639
+
640
+ /* home-made inline implementation of round(3) */
641
+ if (number > 0.0) {
642
+ d = floor(number);
643
+ number = d + (number - d >= 0.5);
644
+ }
645
+ else if (number < 0.0) {
646
+ d = ceil(number);
647
+ number = d - (d - number >= 0.5);
648
+ }
649
+
650
+ if (ndigits < 0) number *= f;
651
+ else number /= f;
652
+ }
653
+
654
+ if (ndigits > 0) {
655
+ if (!isfinite(number)) return num;
656
+ return mrb_float_value(mrb, number);
657
+ }
658
+ return mrb_fixnum_value((mrb_int)number);
659
+ }
660
+
661
+ /* 15.2.9.3.14 */
662
+ /* 15.2.9.3.15 */
663
+ /*
664
+ * call-seq:
665
+ * flt.to_i -> integer
666
+ * flt.to_int -> integer
667
+ * flt.truncate -> integer
668
+ *
669
+ * Returns <i>flt</i> truncated to an <code>Integer</code>.
670
+ */
671
+
672
+ static mrb_value
673
+ flo_truncate(mrb_state *mrb, mrb_value num)
674
+ {
675
+ mrb_float f = mrb_float(num);
676
+
677
+ if (f > 0.0) f = floor(f);
678
+ if (f < 0.0) f = ceil(f);
679
+
680
+ mrb_check_num_exact(mrb, f);
681
+ if (!FIXABLE_FLOAT(f)) {
682
+ return mrb_float_value(mrb, f);
683
+ }
684
+ return mrb_fixnum_value((mrb_int)f);
685
+ }
686
+
687
+ static mrb_value
688
+ flo_nan_p(mrb_state *mrb, mrb_value num)
689
+ {
690
+ return mrb_bool_value(isnan(mrb_float(num)));
691
+ }
692
+ #endif
693
+
694
+ /*
695
+ * Document-class: Integer
696
+ *
697
+ * <code>Integer</code> is the basis for the two concrete classes that
698
+ * hold whole numbers, <code>Bignum</code> and <code>Fixnum</code>.
699
+ *
700
+ */
701
+
702
+
703
+ /*
704
+ * call-seq:
705
+ * int.to_i -> integer
706
+ * int.to_int -> integer
707
+ *
708
+ * As <i>int</i> is already an <code>Integer</code>, all these
709
+ * methods simply return the receiver.
710
+ */
711
+
712
+ static mrb_value
713
+ int_to_i(mrb_state *mrb, mrb_value num)
714
+ {
715
+ return num;
716
+ }
717
+
718
+ mrb_value
719
+ mrb_fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
720
+ {
721
+ mrb_int a;
722
+
723
+ a = mrb_fixnum(x);
724
+ if (mrb_fixnum_p(y)) {
725
+ mrb_int b, c;
726
+
727
+ if (a == 0) return x;
728
+ b = mrb_fixnum(y);
729
+ if (mrb_int_mul_overflow(a, b, &c)) {
730
+ #ifndef MRB_WITHOUT_FLOAT
731
+ return mrb_float_value(mrb, (mrb_float)a * (mrb_float)b);
732
+ #endif
733
+ }
734
+ return mrb_fixnum_value(c);
735
+ }
736
+ #ifdef MRB_WITHOUT_FLOAT
737
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
738
+ #else
739
+ return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y));
740
+ #endif
741
+ }
742
+
743
+ /* 15.2.8.3.3 */
744
+ /*
745
+ * call-seq:
746
+ * fix * numeric -> numeric_result
747
+ *
748
+ * Performs multiplication: the class of the resulting object depends on
749
+ * the class of <code>numeric</code> and on the magnitude of the
750
+ * result.
751
+ */
752
+
753
+ static mrb_value
754
+ fix_mul(mrb_state *mrb, mrb_value x)
755
+ {
756
+ mrb_value y;
757
+
758
+ mrb_get_args(mrb, "o", &y);
759
+ return mrb_fixnum_mul(mrb, x, y);
760
+ }
761
+
762
+ static void
763
+ fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
764
+ {
765
+ mrb_int div, mod;
766
+
767
+ /* TODO: add mrb_assert(y != 0) to make sure */
768
+
769
+ if (y < 0) {
770
+ if (x < 0)
771
+ div = -x / -y;
772
+ else
773
+ div = - (x / -y);
774
+ }
775
+ else {
776
+ if (x < 0)
777
+ div = - (-x / y);
778
+ else
779
+ div = x / y;
780
+ }
781
+ mod = x - div*y;
782
+ if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) {
783
+ mod += y;
784
+ div -= 1;
785
+ }
786
+ if (divp) *divp = div;
787
+ if (modp) *modp = mod;
788
+ }
789
+
790
+ /* 15.2.8.3.5 */
791
+ /*
792
+ * call-seq:
793
+ * fix % other -> real
794
+ * fix.modulo(other) -> real
795
+ *
796
+ * Returns <code>fix</code> modulo <code>other</code>.
797
+ * See <code>numeric.divmod</code> for more information.
798
+ */
799
+
800
+ static mrb_value
801
+ fix_mod(mrb_state *mrb, mrb_value x)
802
+ {
803
+ mrb_value y;
804
+ mrb_int a;
805
+
806
+ mrb_get_args(mrb, "o", &y);
807
+ a = mrb_fixnum(x);
808
+ if (mrb_fixnum_p(y)) {
809
+ mrb_int b, mod;
810
+
811
+ if ((b=mrb_fixnum(y)) == 0) {
812
+ #ifdef MRB_WITHOUT_FLOAT
813
+ /* ZeroDivisionError */
814
+ return mrb_fixnum_value(0);
815
+ #else
816
+ return mrb_float_value(mrb, NAN);
817
+ #endif
818
+ }
819
+ fixdivmod(mrb, a, b, 0, &mod);
820
+ return mrb_fixnum_value(mod);
821
+ }
822
+ #ifdef MRB_WITHOUT_FLOAT
823
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
824
+ #else
825
+ else {
826
+ mrb_float mod;
827
+
828
+ flodivmod(mrb, (mrb_float)a, mrb_to_flo(mrb, y), 0, &mod);
829
+ return mrb_float_value(mrb, mod);
830
+ }
831
+ #endif
832
+ }
833
+
834
+ /*
835
+ * call-seq:
836
+ * fix.divmod(numeric) -> array
837
+ *
838
+ * See <code>Numeric#divmod</code>.
839
+ */
840
+ static mrb_value
841
+ fix_divmod(mrb_state *mrb, mrb_value x)
842
+ {
843
+ mrb_value y;
844
+
845
+ mrb_get_args(mrb, "o", &y);
846
+
847
+ if (mrb_fixnum_p(y)) {
848
+ mrb_int div, mod;
849
+
850
+ if (mrb_fixnum(y) == 0) {
851
+ #ifdef MRB_WITHOUT_FLOAT
852
+ return mrb_assoc_new(mrb, mrb_fixnum_value(0), mrb_fixnum_value(0));
853
+ #else
854
+ return mrb_assoc_new(mrb, ((mrb_fixnum(x) == 0) ?
855
+ mrb_float_value(mrb, NAN):
856
+ mrb_float_value(mrb, INFINITY)),
857
+ mrb_float_value(mrb, NAN));
858
+ #endif
859
+ }
860
+ fixdivmod(mrb, mrb_fixnum(x), mrb_fixnum(y), &div, &mod);
861
+ return mrb_assoc_new(mrb, mrb_fixnum_value(div), mrb_fixnum_value(mod));
862
+ }
863
+ #ifdef MRB_WITHOUT_FLOAT
864
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
865
+ #else
866
+ else {
867
+ mrb_float div, mod;
868
+ mrb_value a, b;
869
+
870
+ flodivmod(mrb, (mrb_float)mrb_fixnum(x), mrb_to_flo(mrb, y), &div, &mod);
871
+ a = mrb_float_value(mrb, div);
872
+ b = mrb_float_value(mrb, mod);
873
+ return mrb_assoc_new(mrb, a, b);
874
+ }
875
+ #endif
876
+ }
877
+
878
+ #ifndef MRB_WITHOUT_FLOAT
879
+ static mrb_value
880
+ flo_divmod(mrb_state *mrb, mrb_value x)
881
+ {
882
+ mrb_value y;
883
+ mrb_float div, mod;
884
+ mrb_value a, b;
885
+
886
+ mrb_get_args(mrb, "o", &y);
887
+
888
+ flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), &div, &mod);
889
+ a = mrb_float_value(mrb, div);
890
+ b = mrb_float_value(mrb, mod);
891
+ return mrb_assoc_new(mrb, a, b);
892
+ }
893
+ #endif
894
+
895
+ /* 15.2.8.3.7 */
896
+ /*
897
+ * call-seq:
898
+ * fix == other -> true or false
899
+ *
900
+ * Return <code>true</code> if <code>fix</code> equals <code>other</code>
901
+ * numerically.
902
+ *
903
+ * 1 == 2 #=> false
904
+ * 1 == 1.0 #=> true
905
+ */
906
+
907
+ static mrb_value
908
+ fix_equal(mrb_state *mrb, mrb_value x)
909
+ {
910
+ mrb_value y;
911
+
912
+ mrb_get_args(mrb, "o", &y);
913
+ switch (mrb_type(y)) {
914
+ case MRB_TT_FIXNUM:
915
+ return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y));
916
+ #ifndef MRB_WITHOUT_FLOAT
917
+ case MRB_TT_FLOAT:
918
+ return mrb_bool_value((mrb_float)mrb_fixnum(x) == mrb_float(y));
919
+ #endif
920
+ default:
921
+ return mrb_false_value();
922
+ }
923
+ }
924
+
925
+ /* 15.2.8.3.8 */
926
+ /*
927
+ * call-seq:
928
+ * ~fix -> integer
929
+ *
930
+ * One's complement: returns a number where each bit is flipped.
931
+ * ex.0---00001 (1)-> 1---11110 (-2)
932
+ * ex.0---00010 (2)-> 1---11101 (-3)
933
+ * ex.0---00100 (4)-> 1---11011 (-5)
934
+ */
935
+
936
+ static mrb_value
937
+ fix_rev(mrb_state *mrb, mrb_value num)
938
+ {
939
+ mrb_int val = mrb_fixnum(num);
940
+
941
+ return mrb_fixnum_value(~val);
942
+ }
943
+
944
+ #ifdef MRB_WITHOUT_FLOAT
945
+ #define bit_op(x,y,op1,op2) do {\
946
+ return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\
947
+ } while(0)
948
+ #else
949
+ static mrb_value flo_and(mrb_state *mrb, mrb_value x);
950
+ static mrb_value flo_or(mrb_state *mrb, mrb_value x);
951
+ static mrb_value flo_xor(mrb_state *mrb, mrb_value x);
952
+ #define bit_op(x,y,op1,op2) do {\
953
+ if (mrb_fixnum_p(y)) return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\
954
+ return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)mrb_fixnum(x)));\
955
+ } while(0)
956
+ #endif
957
+
958
+ /* 15.2.8.3.9 */
959
+ /*
960
+ * call-seq:
961
+ * fix & integer -> integer_result
962
+ *
963
+ * Bitwise AND.
964
+ */
965
+
966
+ static mrb_value
967
+ fix_and(mrb_state *mrb, mrb_value x)
968
+ {
969
+ mrb_value y;
970
+
971
+ mrb_get_args(mrb, "o", &y);
972
+ bit_op(x, y, and, &);
973
+ }
974
+
975
+ /* 15.2.8.3.10 */
976
+ /*
977
+ * call-seq:
978
+ * fix | integer -> integer_result
979
+ *
980
+ * Bitwise OR.
981
+ */
982
+
983
+ static mrb_value
984
+ fix_or(mrb_state *mrb, mrb_value x)
985
+ {
986
+ mrb_value y;
987
+
988
+ mrb_get_args(mrb, "o", &y);
989
+ bit_op(x, y, or, |);
990
+ }
991
+
992
+ /* 15.2.8.3.11 */
993
+ /*
994
+ * call-seq:
995
+ * fix ^ integer -> integer_result
996
+ *
997
+ * Bitwise EXCLUSIVE OR.
998
+ */
999
+
1000
+ static mrb_value
1001
+ fix_xor(mrb_state *mrb, mrb_value x)
1002
+ {
1003
+ mrb_value y;
1004
+
1005
+ mrb_get_args(mrb, "o", &y);
1006
+ bit_op(x, y, or, ^);
1007
+ }
1008
+
1009
+ #define NUMERIC_SHIFT_WIDTH_MAX (MRB_INT_BIT-1)
1010
+
1011
+ static mrb_value
1012
+ lshift(mrb_state *mrb, mrb_int val, mrb_int width)
1013
+ {
1014
+ if (width < 0) { /* mrb_int overflow */
1015
+ #ifdef MRB_WITHOUT_FLOAT
1016
+ return mrb_fixnum_value(0);
1017
+ #else
1018
+ return mrb_float_value(mrb, INFINITY);
1019
+ #endif
1020
+ }
1021
+ if (val > 0) {
1022
+ if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
1023
+ (val > (MRB_INT_MAX >> width))) {
1024
+ #ifdef MRB_WITHOUT_FLOAT
1025
+ return mrb_fixnum_value(-1);
1026
+ #else
1027
+ goto bit_overflow;
1028
+ #endif
1029
+ }
1030
+ return mrb_fixnum_value(val << width);
1031
+ }
1032
+ else {
1033
+ if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
1034
+ (val < (MRB_INT_MIN >> width))) {
1035
+ #ifdef MRB_WITHOUT_FLOAT
1036
+ return mrb_fixnum_value(0);
1037
+ #else
1038
+ goto bit_overflow;
1039
+ #endif
1040
+ }
1041
+ return mrb_fixnum_value(val * ((mrb_int)1 << width));
1042
+ }
1043
+
1044
+ #ifndef MRB_WITHOUT_FLOAT
1045
+ bit_overflow:
1046
+ {
1047
+ mrb_float f = (mrb_float)val;
1048
+ while (width--) {
1049
+ f *= 2;
1050
+ }
1051
+ return mrb_float_value(mrb, f);
1052
+ }
1053
+ #endif
1054
+ }
1055
+
1056
+ static mrb_value
1057
+ rshift(mrb_int val, mrb_int width)
1058
+ {
1059
+ if (width < 0) { /* mrb_int overflow */
1060
+ return mrb_fixnum_value(0);
1061
+ }
1062
+ if (width >= NUMERIC_SHIFT_WIDTH_MAX) {
1063
+ if (val < 0) {
1064
+ return mrb_fixnum_value(-1);
1065
+ }
1066
+ return mrb_fixnum_value(0);
1067
+ }
1068
+ return mrb_fixnum_value(val >> width);
1069
+ }
1070
+
1071
+ /* 15.2.8.3.12 */
1072
+ /*
1073
+ * call-seq:
1074
+ * fix << count -> integer or float
1075
+ *
1076
+ * Shifts _fix_ left _count_ positions (right if _count_ is negative).
1077
+ */
1078
+
1079
+ static mrb_value
1080
+ fix_lshift(mrb_state *mrb, mrb_value x)
1081
+ {
1082
+ mrb_int width, val;
1083
+
1084
+ mrb_get_args(mrb, "i", &width);
1085
+ if (width == 0) {
1086
+ return x;
1087
+ }
1088
+ val = mrb_fixnum(x);
1089
+ if (val == 0) return x;
1090
+ if (width < 0) {
1091
+ return rshift(val, -width);
1092
+ }
1093
+ return lshift(mrb, val, width);
1094
+ }
1095
+
1096
+ /* 15.2.8.3.13 */
1097
+ /*
1098
+ * call-seq:
1099
+ * fix >> count -> integer or float
1100
+ *
1101
+ * Shifts _fix_ right _count_ positions (left if _count_ is negative).
1102
+ */
1103
+
1104
+ static mrb_value
1105
+ fix_rshift(mrb_state *mrb, mrb_value x)
1106
+ {
1107
+ mrb_int width, val;
1108
+
1109
+ mrb_get_args(mrb, "i", &width);
1110
+ if (width == 0) {
1111
+ return x;
1112
+ }
1113
+ val = mrb_fixnum(x);
1114
+ if (val == 0) return x;
1115
+ if (width < 0) {
1116
+ return lshift(mrb, val, -width);
1117
+ }
1118
+ return rshift(val, width);
1119
+ }
1120
+
1121
+ /* 15.2.8.3.23 */
1122
+ /*
1123
+ * call-seq:
1124
+ * fix.to_f -> float
1125
+ *
1126
+ * Converts <i>fix</i> to a <code>Float</code>.
1127
+ *
1128
+ */
1129
+
1130
+ #ifndef MRB_WITHOUT_FLOAT
1131
+ static mrb_value
1132
+ fix_to_f(mrb_state *mrb, mrb_value num)
1133
+ {
1134
+ return mrb_float_value(mrb, (mrb_float)mrb_fixnum(num));
1135
+ }
1136
+
1137
+ /*
1138
+ * Document-class: FloatDomainError
1139
+ *
1140
+ * Raised when attempting to convert special float values
1141
+ * (in particular infinite or NaN)
1142
+ * to numerical classes which don't support them.
1143
+ *
1144
+ * Float::INFINITY.to_r
1145
+ *
1146
+ * <em>raises the exception:</em>
1147
+ *
1148
+ * FloatDomainError: Infinity
1149
+ */
1150
+ /* ------------------------------------------------------------------------*/
1151
+ MRB_API mrb_value
1152
+ mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x)
1153
+ {
1154
+ mrb_int z = 0;
1155
+
1156
+ if (!mrb_float_p(x)) {
1157
+ mrb_raise(mrb, E_TYPE_ERROR, "non float value");
1158
+ z = 0; /* not reached. just suppress warnings. */
1159
+ }
1160
+ else {
1161
+ mrb_float d = mrb_float(x);
1162
+
1163
+ if (isinf(d)) {
1164
+ mrb_raise(mrb, E_FLOATDOMAIN_ERROR, d < 0 ? "-Infinity" : "Infinity");
1165
+ }
1166
+ if (isnan(d)) {
1167
+ mrb_raise(mrb, E_FLOATDOMAIN_ERROR, "NaN");
1168
+ }
1169
+ if (FIXABLE_FLOAT(d)) {
1170
+ z = (mrb_int)d;
1171
+ }
1172
+ else {
1173
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "number (%S) too big for integer", x);
1174
+ }
1175
+ }
1176
+ return mrb_fixnum_value(z);
1177
+ }
1178
+ #endif
1179
+
1180
+ mrb_value
1181
+ mrb_fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
1182
+ {
1183
+ mrb_int a;
1184
+
1185
+ a = mrb_fixnum(x);
1186
+ if (mrb_fixnum_p(y)) {
1187
+ mrb_int b, c;
1188
+
1189
+ if (a == 0) return y;
1190
+ b = mrb_fixnum(y);
1191
+ if (mrb_int_add_overflow(a, b, &c)) {
1192
+ #ifndef MRB_WITHOUT_FLOAT
1193
+ return mrb_float_value(mrb, (mrb_float)a + (mrb_float)b);
1194
+ #endif
1195
+ }
1196
+ return mrb_fixnum_value(c);
1197
+ }
1198
+ #ifdef MRB_WITHOUT_FLOAT
1199
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
1200
+ #else
1201
+ return mrb_float_value(mrb, (mrb_float)a + mrb_to_flo(mrb, y));
1202
+ #endif
1203
+ }
1204
+
1205
+ /* 15.2.8.3.1 */
1206
+ /*
1207
+ * call-seq:
1208
+ * fix + numeric -> numeric_result
1209
+ *
1210
+ * Performs addition: the class of the resulting object depends on
1211
+ * the class of <code>numeric</code> and on the magnitude of the
1212
+ * result.
1213
+ */
1214
+ static mrb_value
1215
+ fix_plus(mrb_state *mrb, mrb_value self)
1216
+ {
1217
+ mrb_value other;
1218
+
1219
+ mrb_get_args(mrb, "o", &other);
1220
+ return mrb_fixnum_plus(mrb, self, other);
1221
+ }
1222
+
1223
+ mrb_value
1224
+ mrb_fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
1225
+ {
1226
+ mrb_int a;
1227
+
1228
+ a = mrb_fixnum(x);
1229
+ if (mrb_fixnum_p(y)) {
1230
+ mrb_int b, c;
1231
+
1232
+ b = mrb_fixnum(y);
1233
+ if (mrb_int_sub_overflow(a, b, &c)) {
1234
+ #ifndef MRB_WITHOUT_FLOAT
1235
+ return mrb_float_value(mrb, (mrb_float)a - (mrb_float)b);
1236
+ #endif
1237
+ }
1238
+ return mrb_fixnum_value(c);
1239
+ }
1240
+ #ifdef MRB_WITHOUT_FLOAT
1241
+ mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
1242
+ #else
1243
+ return mrb_float_value(mrb, (mrb_float)a - mrb_to_flo(mrb, y));
1244
+ #endif
1245
+ }
1246
+
1247
+ /* 15.2.8.3.2 */
1248
+ /* 15.2.8.3.16 */
1249
+ /*
1250
+ * call-seq:
1251
+ * fix - numeric -> numeric_result
1252
+ *
1253
+ * Performs subtraction: the class of the resulting object depends on
1254
+ * the class of <code>numeric</code> and on the magnitude of the
1255
+ * result.
1256
+ */
1257
+ static mrb_value
1258
+ fix_minus(mrb_state *mrb, mrb_value self)
1259
+ {
1260
+ mrb_value other;
1261
+
1262
+ mrb_get_args(mrb, "o", &other);
1263
+ return mrb_fixnum_minus(mrb, self, other);
1264
+ }
1265
+
1266
+
1267
+ MRB_API mrb_value
1268
+ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
1269
+ {
1270
+ char buf[MRB_INT_BIT+1];
1271
+ char *b = buf + sizeof buf;
1272
+ mrb_int val = mrb_fixnum(x);
1273
+
1274
+ if (base < 2 || 36 < base) {
1275
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %S", mrb_fixnum_value(base));
1276
+ }
1277
+
1278
+ if (val == 0) {
1279
+ *--b = '0';
1280
+ }
1281
+ else if (val < 0) {
1282
+ do {
1283
+ *--b = mrb_digitmap[-(val % base)];
1284
+ } while (val /= base);
1285
+ *--b = '-';
1286
+ }
1287
+ else {
1288
+ do {
1289
+ *--b = mrb_digitmap[(int)(val % base)];
1290
+ } while (val /= base);
1291
+ }
1292
+
1293
+ return mrb_str_new(mrb, b, buf + sizeof(buf) - b);
1294
+ }
1295
+
1296
+ /* 15.2.8.3.25 */
1297
+ /*
1298
+ * call-seq:
1299
+ * fix.to_s(base=10) -> string
1300
+ *
1301
+ * Returns a string containing the representation of <i>fix</i> radix
1302
+ * <i>base</i> (between 2 and 36).
1303
+ *
1304
+ * 12345.to_s #=> "12345"
1305
+ * 12345.to_s(2) #=> "11000000111001"
1306
+ * 12345.to_s(8) #=> "30071"
1307
+ * 12345.to_s(10) #=> "12345"
1308
+ * 12345.to_s(16) #=> "3039"
1309
+ * 12345.to_s(36) #=> "9ix"
1310
+ *
1311
+ */
1312
+ static mrb_value
1313
+ fix_to_s(mrb_state *mrb, mrb_value self)
1314
+ {
1315
+ mrb_int base = 10;
1316
+
1317
+ mrb_get_args(mrb, "|i", &base);
1318
+ return mrb_fixnum_to_str(mrb, self, base);
1319
+ }
1320
+
1321
+ /* compare two numbers: (1:0:-1; -2 for error) */
1322
+ static mrb_int
1323
+ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2)
1324
+ {
1325
+ #ifdef MRB_WITHOUT_FLOAT
1326
+ mrb_int x, y;
1327
+ #else
1328
+ mrb_float x, y;
1329
+ #endif
1330
+
1331
+ #ifdef MRB_WITHOUT_FLOAT
1332
+ x = mrb_fixnum(v1);
1333
+ #else
1334
+ x = mrb_to_flo(mrb, v1);
1335
+ #endif
1336
+ switch (mrb_type(v2)) {
1337
+ case MRB_TT_FIXNUM:
1338
+ #ifdef MRB_WITHOUT_FLOAT
1339
+ y = mrb_fixnum(v2);
1340
+ #else
1341
+ y = (mrb_float)mrb_fixnum(v2);
1342
+ #endif
1343
+ break;
1344
+ #ifndef MRB_WITHOUT_FLOAT
1345
+ case MRB_TT_FLOAT:
1346
+ y = mrb_float(v2);
1347
+ break;
1348
+ #endif
1349
+ default:
1350
+ return -2;
1351
+ }
1352
+ if (x > y)
1353
+ return 1;
1354
+ else {
1355
+ if (x < y)
1356
+ return -1;
1357
+ return 0;
1358
+ }
1359
+ }
1360
+
1361
+ /* 15.2.9.3.6 */
1362
+ /*
1363
+ * call-seq:
1364
+ * self.f <=> other.f => -1, 0, +1
1365
+ * < => -1
1366
+ * = => 0
1367
+ * > => +1
1368
+ * Comparison---Returns -1, 0, or +1 depending on whether <i>fix</i> is
1369
+ * less than, equal to, or greater than <i>numeric</i>. This is the
1370
+ * basis for the tests in <code>Comparable</code>.
1371
+ */
1372
+ static mrb_value
1373
+ num_cmp(mrb_state *mrb, mrb_value self)
1374
+ {
1375
+ mrb_value other;
1376
+ mrb_int n;
1377
+
1378
+ mrb_get_args(mrb, "o", &other);
1379
+ n = cmpnum(mrb, self, other);
1380
+ if (n == -2) return mrb_nil_value();
1381
+ return mrb_fixnum_value(n);
1382
+ }
1383
+
1384
+ static void
1385
+ cmperr(mrb_state *mrb, mrb_value v1, mrb_value v2)
1386
+ {
1387
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "comparison of %S with %S failed",
1388
+ mrb_obj_value(mrb_class(mrb, v1)),
1389
+ mrb_obj_value(mrb_class(mrb, v2)));
1390
+ }
1391
+
1392
+ static mrb_value
1393
+ num_lt(mrb_state *mrb, mrb_value self)
1394
+ {
1395
+ mrb_value other;
1396
+ mrb_int n;
1397
+
1398
+ mrb_get_args(mrb, "o", &other);
1399
+ n = cmpnum(mrb, self, other);
1400
+ if (n == -2) cmperr(mrb, self, other);
1401
+ if (n < 0) return mrb_true_value();
1402
+ return mrb_false_value();
1403
+ }
1404
+
1405
+ static mrb_value
1406
+ num_le(mrb_state *mrb, mrb_value self)
1407
+ {
1408
+ mrb_value other;
1409
+ mrb_int n;
1410
+
1411
+ mrb_get_args(mrb, "o", &other);
1412
+ n = cmpnum(mrb, self, other);
1413
+ if (n == -2) cmperr(mrb, self, other);
1414
+ if (n <= 0) return mrb_true_value();
1415
+ return mrb_false_value();
1416
+ }
1417
+
1418
+ static mrb_value
1419
+ num_gt(mrb_state *mrb, mrb_value self)
1420
+ {
1421
+ mrb_value other;
1422
+ mrb_int n;
1423
+
1424
+ mrb_get_args(mrb, "o", &other);
1425
+ n = cmpnum(mrb, self, other);
1426
+ if (n == -2) cmperr(mrb, self, other);
1427
+ if (n > 0) return mrb_true_value();
1428
+ return mrb_false_value();
1429
+ }
1430
+
1431
+ static mrb_value
1432
+ num_ge(mrb_state *mrb, mrb_value self)
1433
+ {
1434
+ mrb_value other;
1435
+ mrb_int n;
1436
+
1437
+ mrb_get_args(mrb, "o", &other);
1438
+ n = cmpnum(mrb, self, other);
1439
+ if (n == -2) cmperr(mrb, self, other);
1440
+ if (n >= 0) return mrb_true_value();
1441
+ return mrb_false_value();
1442
+ }
1443
+
1444
+ static mrb_value
1445
+ num_finite_p(mrb_state *mrb, mrb_value self)
1446
+ {
1447
+ mrb_get_args(mrb, "");
1448
+ return mrb_true_value();
1449
+ }
1450
+
1451
+ static mrb_value
1452
+ num_infinite_p(mrb_state *mrb, mrb_value self)
1453
+ {
1454
+ mrb_get_args(mrb, "");
1455
+ return mrb_false_value();
1456
+ }
1457
+
1458
+ /* 15.2.9.3.1 */
1459
+ /*
1460
+ * call-seq:
1461
+ * float + other -> float
1462
+ *
1463
+ * Returns a new float which is the sum of <code>float</code>
1464
+ * and <code>other</code>.
1465
+ */
1466
+ #ifndef MRB_WITHOUT_FLOAT
1467
+ static mrb_value
1468
+ flo_plus(mrb_state *mrb, mrb_value x)
1469
+ {
1470
+ mrb_value y;
1471
+
1472
+ mrb_get_args(mrb, "o", &y);
1473
+ return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
1474
+ }
1475
+ #endif
1476
+
1477
+ /* ------------------------------------------------------------------------*/
1478
+ void
1479
+ mrb_init_numeric(mrb_state *mrb)
1480
+ {
1481
+ struct RClass *numeric, *integer, *fixnum;
1482
+ #ifndef MRB_WITHOUT_FLOAT
1483
+ struct RClass *fl;
1484
+ #endif
1485
+
1486
+ /* Numeric Class */
1487
+ numeric = mrb_define_class(mrb, "Numeric", mrb->object_class); /* 15.2.7 */
1488
+
1489
+ mrb_define_method(mrb, numeric, "**", num_pow, MRB_ARGS_REQ(1));
1490
+ mrb_define_method(mrb, numeric, "/", num_div, MRB_ARGS_REQ(1)); /* 15.2.8.3.4 */
1491
+ mrb_define_method(mrb, numeric, "quo", num_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
1492
+ mrb_define_method(mrb, numeric, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.9.3.6 */
1493
+ mrb_define_method(mrb, numeric, "<", num_lt, MRB_ARGS_REQ(1));
1494
+ mrb_define_method(mrb, numeric, "<=", num_le, MRB_ARGS_REQ(1));
1495
+ mrb_define_method(mrb, numeric, ">", num_gt, MRB_ARGS_REQ(1));
1496
+ mrb_define_method(mrb, numeric, ">=", num_ge, MRB_ARGS_REQ(1));
1497
+ mrb_define_method(mrb, numeric, "finite?", num_finite_p, MRB_ARGS_NONE());
1498
+ mrb_define_method(mrb, numeric, "infinite?",num_infinite_p, MRB_ARGS_NONE());
1499
+
1500
+ /* Integer Class */
1501
+ integer = mrb_define_class(mrb, "Integer", numeric); /* 15.2.8 */
1502
+ MRB_SET_INSTANCE_TT(integer, MRB_TT_FIXNUM);
1503
+ mrb_undef_class_method(mrb, integer, "new");
1504
+ mrb_define_method(mrb, integer, "to_i", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.24 */
1505
+ mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE());
1506
+ #ifndef MRB_WITHOUT_FLOAT
1507
+ mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_REQ(1)); /* 15.2.8.3.8 (x) */
1508
+ mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_REQ(1)); /* 15.2.8.3.10 (x) */
1509
+ mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_REQ(1)); /* 15.2.8.3.12 (x) */
1510
+ mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_REQ(1)); /* 15.2.8.3.15 (x) */
1511
+ #endif
1512
+
1513
+ /* Fixnum Class */
1514
+ mrb->fixnum_class = fixnum = mrb_define_class(mrb, "Fixnum", integer);
1515
+ mrb_define_method(mrb, fixnum, "+", fix_plus, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */
1516
+ mrb_define_method(mrb, fixnum, "-", fix_minus, MRB_ARGS_REQ(1)); /* 15.2.8.3.2 */
1517
+ mrb_define_method(mrb, fixnum, "*", fix_mul, MRB_ARGS_REQ(1)); /* 15.2.8.3.3 */
1518
+ mrb_define_method(mrb, fixnum, "%", fix_mod, MRB_ARGS_REQ(1)); /* 15.2.8.3.5 */
1519
+ mrb_define_method(mrb, fixnum, "==", fix_equal, MRB_ARGS_REQ(1)); /* 15.2.8.3.7 */
1520
+ mrb_define_method(mrb, fixnum, "~", fix_rev, MRB_ARGS_NONE()); /* 15.2.8.3.8 */
1521
+ mrb_define_method(mrb, fixnum, "&", fix_and, MRB_ARGS_REQ(1)); /* 15.2.8.3.9 */
1522
+ mrb_define_method(mrb, fixnum, "|", fix_or, MRB_ARGS_REQ(1)); /* 15.2.8.3.10 */
1523
+ mrb_define_method(mrb, fixnum, "^", fix_xor, MRB_ARGS_REQ(1)); /* 15.2.8.3.11 */
1524
+ mrb_define_method(mrb, fixnum, "<<", fix_lshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.12 */
1525
+ mrb_define_method(mrb, fixnum, ">>", fix_rshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.13 */
1526
+ mrb_define_method(mrb, fixnum, "eql?", fix_eql, MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
1527
+ #ifndef MRB_WITHOUT_FLOAT
1528
+ mrb_define_method(mrb, fixnum, "to_f", fix_to_f, MRB_ARGS_NONE()); /* 15.2.8.3.23 */
1529
+ #endif
1530
+ mrb_define_method(mrb, fixnum, "to_s", fix_to_s, MRB_ARGS_NONE()); /* 15.2.8.3.25 */
1531
+ mrb_define_method(mrb, fixnum, "inspect", fix_to_s, MRB_ARGS_NONE());
1532
+ mrb_define_method(mrb, fixnum, "divmod", fix_divmod, MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */
1533
+
1534
+ #ifndef MRB_WITHOUT_FLOAT
1535
+ /* Float Class */
1536
+ mrb->float_class = fl = mrb_define_class(mrb, "Float", numeric); /* 15.2.9 */
1537
+ MRB_SET_INSTANCE_TT(fl, MRB_TT_FLOAT);
1538
+ mrb_undef_class_method(mrb, fl, "new");
1539
+ mrb_define_method(mrb, fl, "+", flo_plus, MRB_ARGS_REQ(1)); /* 15.2.9.3.1 */
1540
+ mrb_define_method(mrb, fl, "-", flo_minus, MRB_ARGS_REQ(1)); /* 15.2.9.3.2 */
1541
+ mrb_define_method(mrb, fl, "*", flo_mul, MRB_ARGS_REQ(1)); /* 15.2.9.3.3 */
1542
+ mrb_define_method(mrb, fl, "%", flo_mod, MRB_ARGS_REQ(1)); /* 15.2.9.3.5 */
1543
+ mrb_define_method(mrb, fl, "==", flo_eq, MRB_ARGS_REQ(1)); /* 15.2.9.3.7 */
1544
+ mrb_define_method(mrb, fl, "~", flo_rev, MRB_ARGS_NONE());
1545
+ mrb_define_method(mrb, fl, "&", flo_and, MRB_ARGS_REQ(1));
1546
+ mrb_define_method(mrb, fl, "|", flo_or, MRB_ARGS_REQ(1));
1547
+ mrb_define_method(mrb, fl, "^", flo_xor, MRB_ARGS_REQ(1));
1548
+ mrb_define_method(mrb, fl, ">>", flo_lshift, MRB_ARGS_REQ(1));
1549
+ mrb_define_method(mrb, fl, "<<", flo_rshift, MRB_ARGS_REQ(1));
1550
+ mrb_define_method(mrb, fl, "ceil", flo_ceil, MRB_ARGS_NONE()); /* 15.2.9.3.8 */
1551
+ mrb_define_method(mrb, fl, "finite?", flo_finite_p, MRB_ARGS_NONE()); /* 15.2.9.3.9 */
1552
+ mrb_define_method(mrb, fl, "floor", flo_floor, MRB_ARGS_NONE()); /* 15.2.9.3.10 */
1553
+ mrb_define_method(mrb, fl, "infinite?", flo_infinite_p, MRB_ARGS_NONE()); /* 15.2.9.3.11 */
1554
+ mrb_define_method(mrb, fl, "round", flo_round, MRB_ARGS_OPT(1)); /* 15.2.9.3.12 */
1555
+ mrb_define_method(mrb, fl, "to_f", flo_to_f, MRB_ARGS_NONE()); /* 15.2.9.3.13 */
1556
+ mrb_define_method(mrb, fl, "to_i", flo_truncate, MRB_ARGS_NONE()); /* 15.2.9.3.14 */
1557
+ mrb_define_method(mrb, fl, "to_int", flo_truncate, MRB_ARGS_NONE());
1558
+ mrb_define_method(mrb, fl, "truncate", flo_truncate, MRB_ARGS_NONE()); /* 15.2.9.3.15 */
1559
+ mrb_define_method(mrb, fl, "divmod", flo_divmod, MRB_ARGS_REQ(1));
1560
+ mrb_define_method(mrb, fl, "eql?", flo_eql, MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
1561
+
1562
+ mrb_define_method(mrb, fl, "to_s", flo_to_s, MRB_ARGS_NONE()); /* 15.2.9.3.16(x) */
1563
+ mrb_define_method(mrb, fl, "inspect", flo_to_s, MRB_ARGS_NONE());
1564
+ mrb_define_method(mrb, fl, "nan?", flo_nan_p, MRB_ARGS_NONE());
1565
+
1566
+ #ifdef INFINITY
1567
+ mrb_define_const(mrb, fl, "INFINITY", mrb_float_value(mrb, INFINITY));
1568
+ #endif
1569
+ #ifdef NAN
1570
+ mrb_define_const(mrb, fl, "NAN", mrb_float_value(mrb, NAN));
1571
+ #endif
1572
+ #endif
1573
+ mrb_define_module(mrb, "Integral");
1574
+ }