script_core 0.2.3 → 0.3.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 (529) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +35 -57
  3. data/.ruby-version +1 -1
  4. data/Gemfile +2 -2
  5. data/README.md +7 -1
  6. data/ext/enterprise_script_service/Rakefile +1 -1
  7. data/ext/enterprise_script_service/libseccomp/.travis.yml +24 -12
  8. data/ext/enterprise_script_service/libseccomp/CHANGELOG +32 -0
  9. data/ext/enterprise_script_service/libseccomp/CONTRIBUTING.md +37 -26
  10. data/ext/enterprise_script_service/libseccomp/CREDITS +11 -0
  11. data/ext/enterprise_script_service/libseccomp/README.md +21 -1
  12. data/ext/enterprise_script_service/libseccomp/configure.ac +13 -8
  13. data/ext/enterprise_script_service/libseccomp/doc/Makefile.am +6 -0
  14. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_api_get.3 +12 -2
  15. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_arch_add.3 +38 -6
  16. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_attr_set.3 +53 -2
  17. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_export_bpf.3 +20 -2
  18. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_init.3 +9 -2
  19. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_load.3 +32 -2
  20. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_merge.3 +16 -2
  21. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_alloc.3 +113 -0
  22. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_fd.3 +1 -0
  23. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_free.3 +1 -0
  24. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_id_valid.3 +1 -0
  25. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_receive.3 +1 -0
  26. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_respond.3 +1 -0
  27. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_rule_add.3 +64 -3
  28. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_syscall_priority.3 +18 -3
  29. data/ext/enterprise_script_service/libseccomp/include/seccomp-syscalls.h +19 -0
  30. data/ext/enterprise_script_service/libseccomp/include/seccomp.h.in +116 -0
  31. data/ext/enterprise_script_service/libseccomp/src/.gitignore +2 -0
  32. data/ext/enterprise_script_service/libseccomp/src/Makefile.am +31 -17
  33. data/ext/enterprise_script_service/libseccomp/src/api.c +254 -58
  34. data/ext/enterprise_script_service/libseccomp/src/arch-aarch64.h +1 -9
  35. data/ext/enterprise_script_service/libseccomp/src/arch-arm.c +47 -2
  36. data/ext/enterprise_script_service/libseccomp/src/arch-arm.h +1 -9
  37. data/ext/enterprise_script_service/libseccomp/src/arch-gperf-generate +40 -0
  38. data/ext/enterprise_script_service/libseccomp/src/arch-mips.c +41 -4
  39. data/ext/enterprise_script_service/libseccomp/src/arch-mips.h +2 -10
  40. data/ext/enterprise_script_service/libseccomp/src/arch-mips64.c +41 -4
  41. data/ext/enterprise_script_service/libseccomp/src/arch-mips64.h +3 -11
  42. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.c +41 -4
  43. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.h +2 -10
  44. data/ext/enterprise_script_service/libseccomp/src/arch-parisc.h +1 -10
  45. data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.c +3 -3
  46. data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.h +29 -0
  47. data/ext/enterprise_script_service/libseccomp/src/arch-ppc.h +1 -9
  48. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.c +606 -8
  49. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.h +2 -10
  50. data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.c +31 -0
  51. data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.h +22 -0
  52. data/ext/enterprise_script_service/libseccomp/src/arch-s390.c +171 -12
  53. data/ext/enterprise_script_service/libseccomp/src/arch-s390.h +1 -17
  54. data/ext/enterprise_script_service/libseccomp/src/arch-s390x.c +166 -10
  55. data/ext/enterprise_script_service/libseccomp/src/arch-s390x.h +1 -20
  56. data/ext/enterprise_script_service/libseccomp/src/arch-syscall-dump.c +8 -1
  57. data/ext/enterprise_script_service/libseccomp/src/arch-syscall-validate +359 -143
  58. data/ext/enterprise_script_service/libseccomp/src/arch-x32.c +36 -2
  59. data/ext/enterprise_script_service/libseccomp/src/arch-x32.h +2 -10
  60. data/ext/enterprise_script_service/libseccomp/src/arch-x86.c +172 -10
  61. data/ext/enterprise_script_service/libseccomp/src/arch-x86.h +1 -14
  62. data/ext/enterprise_script_service/libseccomp/src/arch-x86_64.h +1 -9
  63. data/ext/enterprise_script_service/libseccomp/src/arch.c +11 -3
  64. data/ext/enterprise_script_service/libseccomp/src/arch.h +7 -0
  65. data/ext/enterprise_script_service/libseccomp/src/db.c +268 -57
  66. data/ext/enterprise_script_service/libseccomp/src/db.h +16 -2
  67. data/ext/enterprise_script_service/libseccomp/src/gen_bpf.c +503 -148
  68. data/ext/enterprise_script_service/libseccomp/src/gen_bpf.h +2 -1
  69. data/ext/enterprise_script_service/libseccomp/src/gen_pfc.c +165 -37
  70. data/ext/enterprise_script_service/libseccomp/src/python/libseccomp.pxd +37 -1
  71. data/ext/enterprise_script_service/libseccomp/src/python/seccomp.pyx +295 -5
  72. data/ext/enterprise_script_service/libseccomp/src/syscalls.c +56 -0
  73. data/ext/enterprise_script_service/libseccomp/src/syscalls.csv +470 -0
  74. data/ext/enterprise_script_service/libseccomp/src/syscalls.h +62 -0
  75. data/ext/enterprise_script_service/libseccomp/src/syscalls.perf.template +82 -0
  76. data/ext/enterprise_script_service/libseccomp/src/system.c +196 -16
  77. data/ext/enterprise_script_service/libseccomp/src/system.h +68 -13
  78. data/ext/enterprise_script_service/libseccomp/tests/.gitignore +10 -2
  79. data/ext/enterprise_script_service/libseccomp/tests/06-sim-actions.tests +1 -1
  80. data/ext/enterprise_script_service/libseccomp/tests/11-basic-basic_errors.c +5 -5
  81. data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.c +35 -1
  82. data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.py +10 -1
  83. data/ext/enterprise_script_service/libseccomp/tests/15-basic-resolver.c +4 -3
  84. data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.c +12 -0
  85. data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.py +1 -0
  86. data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.c → 18-sim-basic_allowlist.c} +0 -0
  87. data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.py → 18-sim-basic_allowlist.py} +0 -0
  88. data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_allowlist.tests +32 -0
  89. data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.c +3 -0
  90. data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.py +1 -0
  91. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.c +3 -0
  92. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.py +1 -0
  93. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.tests +33 -17
  94. data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.c → 34-sim-basic_denylist.c} +0 -0
  95. data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.py → 34-sim-basic_denylist.py} +0 -0
  96. data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_denylist.tests +32 -0
  97. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.c +3 -0
  98. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.py +1 -0
  99. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.tests +25 -25
  100. data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.c +24 -3
  101. data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.py +16 -1
  102. data/ext/enterprise_script_service/libseccomp/tests/47-live-kill_process.c +3 -3
  103. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.c +112 -0
  104. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.py +60 -0
  105. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.tests +11 -0
  106. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.c +48 -0
  107. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.py +38 -0
  108. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.tests +11 -0
  109. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.c +156 -0
  110. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.py +95 -0
  111. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.tests +65 -0
  112. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.c +128 -0
  113. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.py +95 -0
  114. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.tests +11 -0
  115. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.c +134 -0
  116. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.sh +46 -0
  117. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.tests +11 -0
  118. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.c +90 -0
  119. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.py +65 -0
  120. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.tests +11 -0
  121. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.c +64 -0
  122. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.py +46 -0
  123. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.tests +11 -0
  124. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.c +116 -0
  125. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.py +61 -0
  126. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.tests +11 -0
  127. data/ext/enterprise_script_service/libseccomp/tests/Makefile.am +34 -10
  128. data/ext/enterprise_script_service/libseccomp/tests/regression +10 -3
  129. data/ext/enterprise_script_service/libseccomp/tests/util.c +3 -3
  130. data/ext/enterprise_script_service/libseccomp/tools/Makefile.am +0 -3
  131. data/ext/enterprise_script_service/libseccomp/tools/check-syntax +1 -1
  132. data/ext/enterprise_script_service/libseccomp/tools/scmp_arch_detect.c +3 -0
  133. data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_disasm.c +4 -2
  134. data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_sim.c +4 -0
  135. data/ext/enterprise_script_service/libseccomp/tools/util.c +14 -12
  136. data/ext/enterprise_script_service/libseccomp/tools/util.h +7 -0
  137. data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +149 -0
  138. data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +55 -0
  139. data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
  140. data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
  141. data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
  142. data/ext/enterprise_script_service/mruby/.gitignore +3 -0
  143. data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
  144. data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
  145. data/ext/enterprise_script_service/mruby/.travis.yml +7 -10
  146. data/ext/enterprise_script_service/mruby/.yamllint +8 -0
  147. data/ext/enterprise_script_service/mruby/AUTHORS +4 -0
  148. data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
  149. data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
  150. data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
  151. data/ext/enterprise_script_service/mruby/LICENSE +1 -1
  152. data/ext/enterprise_script_service/mruby/Makefile +1 -1
  153. data/ext/enterprise_script_service/mruby/README.md +5 -11
  154. data/ext/enterprise_script_service/mruby/Rakefile +18 -108
  155. data/ext/enterprise_script_service/mruby/TODO.md +17 -0
  156. data/ext/enterprise_script_service/mruby/appveyor.yml +29 -26
  157. data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
  158. data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
  159. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +4 -21
  160. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +4 -4
  161. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +3 -20
  162. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +4 -21
  163. data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
  164. data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
  165. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_android_armeabi_v7a_neon_hard.rb → build_config/android_armeabi_v7a_neon_hard.rb} +0 -15
  166. data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
  167. data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
  168. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +4 -21
  169. data/ext/enterprise_script_service/mruby/{appveyor_config.rb → build_config/ci/gcc-clang.rb} +11 -8
  170. data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
  171. data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
  172. data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
  173. data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
  174. data/ext/enterprise_script_service/mruby/build_config/dreamcast_shelf.rb +94 -0
  175. data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
  176. data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
  177. data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
  178. data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
  179. data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
  180. data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
  181. data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
  182. data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
  183. data/ext/enterprise_script_service/mruby/doc/guides/compile.md +142 -49
  184. data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
  185. data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
  186. data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +53 -30
  187. data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
  188. data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
  189. data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
  190. data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
  191. data/ext/enterprise_script_service/mruby/doc/opcode.md +102 -103
  192. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
  193. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
  194. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
  195. data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
  196. data/ext/enterprise_script_service/mruby/include/mrbconf.h +88 -66
  197. data/ext/enterprise_script_service/mruby/include/mruby.h +160 -104
  198. data/ext/enterprise_script_service/mruby/include/mruby/array.h +27 -6
  199. data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +80 -46
  200. data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
  201. data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +76 -55
  202. data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
  203. data/ext/enterprise_script_service/mruby/include/mruby/common.h +14 -1
  204. data/ext/enterprise_script_service/mruby/include/mruby/compile.h +20 -6
  205. data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
  206. data/ext/enterprise_script_service/mruby/include/mruby/dump.h +18 -52
  207. data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
  208. data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
  209. data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
  210. data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
  211. data/ext/enterprise_script_service/mruby/include/mruby/irep.h +74 -14
  212. data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -1
  213. data/ext/enterprise_script_service/mruby/include/mruby/khash.h +19 -9
  214. data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +37 -63
  215. data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
  216. data/ext/enterprise_script_service/mruby/include/mruby/ops.h +29 -24
  217. data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
  218. data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
  219. data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
  220. data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
  221. data/ext/enterprise_script_service/mruby/include/mruby/proc.h +93 -21
  222. data/ext/enterprise_script_service/mruby/include/mruby/string.h +12 -16
  223. data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
  224. data/ext/enterprise_script_service/mruby/include/mruby/value.h +60 -59
  225. data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
  226. data/ext/enterprise_script_service/mruby/include/mruby/version.h +25 -6
  227. data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -72
  228. data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +71 -78
  229. data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
  230. data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
  231. data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +84 -32
  232. data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
  233. data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
  234. data/ext/enterprise_script_service/mruby/lib/mruby/source.rb +3 -1
  235. data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
  236. data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
  237. data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -81
  238. data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
  239. data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
  240. data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
  241. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -32
  242. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +10 -12
  243. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/test/array.rb +0 -13
  244. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +30 -18
  245. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
  246. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
  247. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
  248. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
  249. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
  250. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -4
  251. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
  252. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +6 -2
  253. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
  254. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
  255. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +46 -35
  256. data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
  257. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
  258. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +41 -28
  259. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
  260. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -2
  261. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +26 -6
  262. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
  263. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +6 -2
  264. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
  265. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
  266. data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +7 -1
  267. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +495 -436
  268. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
  269. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
  270. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +637 -220
  271. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +13734 -0
  272. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +20 -23
  273. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +2 -2
  274. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +9 -9
  275. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
  276. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
  277. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
  278. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -2
  279. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/src/exception.c +3 -3
  280. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +19 -238
  281. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/test/eval.rb +21 -0
  282. data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +19 -15
  283. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +31 -5
  284. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
  285. data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +5 -6
  286. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
  287. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +39 -7
  288. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrbgem.rake +2 -8
  289. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
  290. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +0 -16
  291. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +9 -14
  292. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +107 -59
  293. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +22 -38
  294. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +417 -203
  295. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +20 -12
  296. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +33 -2
  297. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +58 -50
  298. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +13 -14
  299. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
  300. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
  301. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +56 -73
  302. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +13 -4
  303. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
  304. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +80 -78
  305. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
  306. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
  307. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +8 -16
  308. data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -13
  309. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
  310. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
  311. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
  312. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
  313. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +120 -67
  314. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
  315. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +65 -26
  316. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +34 -21
  317. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
  318. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
  319. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
  320. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
  321. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +21 -43
  322. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
  323. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +12 -20
  324. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
  325. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
  326. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
  327. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +5 -5
  328. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
  329. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/mrbgem.rake +1 -1
  330. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
  331. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/test/sockettest.c +3 -2
  332. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +161 -93
  333. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +9 -25
  334. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
  335. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +17 -14
  336. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
  337. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +23 -36
  338. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +7 -6
  339. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
  340. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
  341. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
  342. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +17 -44
  343. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
  344. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +37 -41
  345. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
  346. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
  347. data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
  348. data/ext/enterprise_script_service/mruby/mrblib/00class.rb +10 -0
  349. data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
  350. data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
  351. data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
  352. data/ext/enterprise_script_service/mruby/mrblib/hash.rb +3 -23
  353. data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
  354. data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
  355. data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
  356. data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
  357. data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
  358. data/ext/enterprise_script_service/mruby/src/array.c +67 -90
  359. data/ext/enterprise_script_service/mruby/src/backtrace.c +18 -19
  360. data/ext/enterprise_script_service/mruby/src/class.c +819 -211
  361. data/ext/enterprise_script_service/mruby/src/codedump.c +226 -197
  362. data/ext/enterprise_script_service/mruby/src/debug.c +14 -11
  363. data/ext/enterprise_script_service/mruby/src/dump.c +470 -207
  364. data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
  365. data/ext/enterprise_script_service/mruby/src/error.c +94 -20
  366. data/ext/enterprise_script_service/mruby/src/etc.c +56 -39
  367. data/ext/enterprise_script_service/mruby/src/fmt_fp.c +103 -27
  368. data/ext/enterprise_script_service/mruby/src/gc.c +86 -349
  369. data/ext/enterprise_script_service/mruby/src/hash.c +1058 -723
  370. data/ext/enterprise_script_service/mruby/src/kernel.c +78 -226
  371. data/ext/enterprise_script_service/mruby/src/load.c +215 -159
  372. data/ext/enterprise_script_service/mruby/src/numeric.c +400 -382
  373. data/ext/enterprise_script_service/mruby/src/object.c +115 -90
  374. data/ext/enterprise_script_service/mruby/src/print.c +31 -6
  375. data/ext/enterprise_script_service/mruby/src/proc.c +56 -45
  376. data/ext/enterprise_script_service/mruby/src/range.c +49 -33
  377. data/ext/enterprise_script_service/mruby/src/state.c +58 -42
  378. data/ext/enterprise_script_service/mruby/src/string.c +151 -156
  379. data/ext/enterprise_script_service/mruby/src/symbol.c +132 -66
  380. data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
  381. data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
  382. data/ext/enterprise_script_service/mruby/src/vm.c +655 -645
  383. data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
  384. data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
  385. data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
  386. data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
  387. data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +64 -61
  388. data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
  389. data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
  390. data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
  391. data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
  392. data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
  393. data/ext/enterprise_script_service/mruby/tasks/toolchains/android.rake +46 -1
  394. data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +8 -7
  395. data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +13 -17
  396. data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +21 -25
  397. data/ext/enterprise_script_service/mruby/test/assert.rb +5 -4
  398. data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
  399. data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
  400. data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
  401. data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
  402. data/ext/enterprise_script_service/mruby/test/t/ensure.rb +8 -26
  403. data/ext/enterprise_script_service/mruby/test/t/exception.rb +2 -2
  404. data/ext/enterprise_script_service/mruby/test/t/float.rb +18 -8
  405. data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
  406. data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
  407. data/ext/enterprise_script_service/mruby/test/t/kernel.rb +16 -25
  408. data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
  409. data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
  410. data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
  411. data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
  412. data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
  413. data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
  414. data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
  415. data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
  416. data/ext/enterprise_script_service/mruby_config.rb +2 -5
  417. data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
  418. data/ext/enterprise_script_service/msgpack/.github/depends/boost.sh +56 -0
  419. data/ext/enterprise_script_service/msgpack/.github/workflows/coverage.yml +62 -0
  420. data/ext/enterprise_script_service/msgpack/.github/workflows/gha.yml +304 -0
  421. data/ext/enterprise_script_service/msgpack/CHANGELOG.md +11 -0
  422. data/ext/enterprise_script_service/msgpack/CMakeLists.txt +82 -39
  423. data/ext/enterprise_script_service/msgpack/Files.cmake +22 -12
  424. data/ext/enterprise_script_service/msgpack/QUICKSTART-C.md +26 -29
  425. data/ext/enterprise_script_service/msgpack/README.md +3 -2
  426. data/ext/enterprise_script_service/msgpack/appveyor.yml +6 -2
  427. data/ext/enterprise_script_service/msgpack/ci/build_cmake.sh +3 -1
  428. data/ext/enterprise_script_service/msgpack/cmake/CodeCoverage.cmake +55 -0
  429. data/ext/enterprise_script_service/msgpack/codecov.yml +36 -0
  430. data/ext/enterprise_script_service/msgpack/example/CMakeLists.txt +9 -5
  431. data/ext/enterprise_script_service/msgpack/example/boost/CMakeLists.txt +1 -1
  432. data/ext/enterprise_script_service/msgpack/example/c/CMakeLists.txt +17 -6
  433. data/ext/enterprise_script_service/msgpack/example/c/boundary.c +296 -0
  434. data/ext/enterprise_script_service/msgpack/example/c/jsonconv.c +419 -0
  435. data/ext/enterprise_script_service/msgpack/example/c/simple_c.c +1 -1
  436. data/ext/enterprise_script_service/msgpack/example/cpp03/CMakeLists.txt +3 -3
  437. data/ext/enterprise_script_service/msgpack/example/cpp11/CMakeLists.txt +2 -2
  438. data/ext/enterprise_script_service/msgpack/example/x3/CMakeLists.txt +2 -2
  439. data/ext/enterprise_script_service/msgpack/include/msgpack/pack.h +24 -1
  440. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/array_ref.hpp +5 -4
  441. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/boost/optional.hpp +4 -4
  442. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp17/vector_byte.hpp +8 -8
  443. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/map.hpp +4 -4
  444. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector.hpp +4 -4
  445. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_char.hpp +8 -8
  446. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_unsigned_char.hpp +8 -8
  447. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/wstring.hpp +4 -4
  448. data/ext/enterprise_script_service/msgpack/include/msgpack/v3/unpack.hpp +6 -6
  449. data/ext/enterprise_script_service/msgpack/include/msgpack/version_master.h +2 -2
  450. data/ext/enterprise_script_service/msgpack/include/msgpack/zbuffer.h +4 -4
  451. data/ext/enterprise_script_service/msgpack/make_file_list.sh +38 -11
  452. data/ext/enterprise_script_service/msgpack/src/vrefbuffer.c +6 -0
  453. data/ext/enterprise_script_service/msgpack/test/CMakeLists.txt +86 -64
  454. data/ext/enterprise_script_service/msgpack/test/array_ref.cpp +4 -0
  455. data/ext/enterprise_script_service/msgpack/test/boost_fusion.cpp +4 -0
  456. data/ext/enterprise_script_service/msgpack/test/boost_optional.cpp +4 -0
  457. data/ext/enterprise_script_service/msgpack/test/boost_string_ref.cpp +4 -1
  458. data/ext/enterprise_script_service/msgpack/test/boost_string_view.cpp +4 -0
  459. data/ext/enterprise_script_service/msgpack/test/boost_variant.cpp +4 -0
  460. data/ext/enterprise_script_service/msgpack/test/buffer.cpp +4 -47
  461. data/ext/enterprise_script_service/msgpack/test/buffer_c.cpp +148 -0
  462. data/ext/enterprise_script_service/msgpack/test/carray.cpp +4 -0
  463. data/ext/enterprise_script_service/msgpack/test/cases.cpp +8 -4
  464. data/ext/enterprise_script_service/msgpack/test/convert.cpp +8 -4
  465. data/ext/enterprise_script_service/msgpack/test/fixint.cpp +4 -0
  466. data/ext/enterprise_script_service/msgpack/test/fixint_c.cpp +4 -0
  467. data/ext/enterprise_script_service/msgpack/test/fuzz_unpack_pack_fuzzer_cpp11.cpp +4 -0
  468. data/ext/enterprise_script_service/msgpack/test/iterator_cpp11.cpp +4 -0
  469. data/ext/enterprise_script_service/msgpack/test/json.cpp +4 -0
  470. data/ext/enterprise_script_service/msgpack/test/limit.cpp +8 -4
  471. data/ext/enterprise_script_service/msgpack/test/msgpack_basic.cpp +4 -0
  472. data/ext/enterprise_script_service/msgpack/test/msgpack_c.cpp +159 -0
  473. data/ext/enterprise_script_service/msgpack/test/msgpack_container.cpp +4 -0
  474. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp11.cpp +32 -27
  475. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp17.cpp +4 -0
  476. data/ext/enterprise_script_service/msgpack/test/msgpack_stream.cpp +4 -0
  477. data/ext/enterprise_script_service/msgpack/test/msgpack_tuple.cpp +4 -1
  478. data/ext/enterprise_script_service/msgpack/test/msgpack_vref.cpp +4 -0
  479. data/ext/enterprise_script_service/msgpack/test/msgpack_x3_parse.cpp +4 -0
  480. data/ext/enterprise_script_service/msgpack/test/object.cpp +4 -1
  481. data/ext/enterprise_script_service/msgpack/test/object_with_zone.cpp +12 -8
  482. data/ext/enterprise_script_service/msgpack/test/pack_unpack.cpp +30 -26
  483. data/ext/enterprise_script_service/msgpack/test/pack_unpack_c.cpp +4 -0
  484. data/ext/enterprise_script_service/msgpack/test/raw.cpp +4 -0
  485. data/ext/enterprise_script_service/msgpack/test/reference.cpp +4 -0
  486. data/ext/enterprise_script_service/msgpack/test/reference_cpp11.cpp +4 -0
  487. data/ext/enterprise_script_service/msgpack/test/reference_wrapper_cpp11.cpp +4 -0
  488. data/ext/enterprise_script_service/msgpack/test/shared_ptr_cpp11.cpp +4 -0
  489. data/ext/enterprise_script_service/msgpack/test/size_equal_only.cpp +4 -0
  490. data/ext/enterprise_script_service/msgpack/test/streaming.cpp +8 -4
  491. data/ext/enterprise_script_service/msgpack/test/streaming_c.cpp +4 -0
  492. data/ext/enterprise_script_service/msgpack/test/unique_ptr_cpp11.cpp +4 -0
  493. data/ext/enterprise_script_service/msgpack/test/user_class.cpp +16 -12
  494. data/ext/enterprise_script_service/msgpack/test/version.cpp +4 -0
  495. data/ext/enterprise_script_service/msgpack/test/visitor.cpp +4 -0
  496. data/ext/enterprise_script_service/msgpack/test/zone.cpp +4 -0
  497. data/lib/script_core/engine.rb +24 -5
  498. data/lib/script_core/executable.rb +4 -3
  499. data/lib/script_core/version.rb +1 -1
  500. data/lib/tasks/script_core.rake +3 -1
  501. data/script_core.gemspec +1 -2
  502. data/spec/dummy/app/lib/script_engine.rb +64 -5
  503. data/spec/script_core_spec.rb +13 -0
  504. metadata +123 -61
  505. data/ext/enterprise_script_service/libseccomp/src/arch-aarch64-syscalls.c +0 -559
  506. data/ext/enterprise_script_service/libseccomp/src/arch-arm-syscalls.c +0 -570
  507. data/ext/enterprise_script_service/libseccomp/src/arch-mips-syscalls.c +0 -562
  508. data/ext/enterprise_script_service/libseccomp/src/arch-mips64-syscalls.c +0 -562
  509. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32-syscalls.c +0 -562
  510. data/ext/enterprise_script_service/libseccomp/src/arch-parisc-syscalls.c +0 -542
  511. data/ext/enterprise_script_service/libseccomp/src/arch-ppc-syscalls.c +0 -559
  512. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64-syscalls.c +0 -559
  513. data/ext/enterprise_script_service/libseccomp/src/arch-s390-syscalls.c +0 -626
  514. data/ext/enterprise_script_service/libseccomp/src/arch-s390x-syscalls.c +0 -626
  515. data/ext/enterprise_script_service/libseccomp/src/arch-x32-syscalls.c +0 -558
  516. data/ext/enterprise_script_service/libseccomp/src/arch-x86-syscalls.c +0 -692
  517. data/ext/enterprise_script_service/libseccomp/src/arch-x86_64-syscalls.c +0 -559
  518. data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_whitelist.tests +0 -32
  519. data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_blacklist.tests +0 -32
  520. data/ext/enterprise_script_service/mruby/TODO +0 -8
  521. data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
  522. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
  523. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
  524. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
  525. data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
  526. data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
  527. data/ext/enterprise_script_service/mruby/src/mruby_core.rake +0 -19
  528. data/ext/enterprise_script_service/mruby/travis_config.rb +0 -54
  529. data/ext/enterprise_script_service/msgpack/.travis.yml +0 -258
@@ -1,10 +1,10 @@
1
1
  /*
2
- ** numeric.c - Numeric, Integer, Float, Fixnum class
2
+ ** numeric.c - Numeric, Integer, Float class
3
3
  **
4
4
  ** See Copyright Notice in mruby.h
5
5
  */
6
6
 
7
- #ifndef MRB_WITHOUT_FLOAT
7
+ #ifndef MRB_NO_FLOAT
8
8
  #include <float.h>
9
9
  #include <math.h>
10
10
  #endif
@@ -17,9 +17,10 @@
17
17
  #include <mruby/numeric.h>
18
18
  #include <mruby/string.h>
19
19
  #include <mruby/class.h>
20
+ #include <mruby/presym.h>
20
21
 
21
- #ifndef MRB_WITHOUT_FLOAT
22
- #ifdef MRB_USE_FLOAT
22
+ #ifndef MRB_NO_FLOAT
23
+ #ifdef MRB_USE_FLOAT32
23
24
  #define trunc(f) truncf(f)
24
25
  #define floor(f) floorf(f)
25
26
  #define ceil(f) ceilf(f)
@@ -30,30 +31,38 @@
30
31
  #endif
31
32
  #endif
32
33
 
33
- #ifndef MRB_WITHOUT_FLOAT
34
+ #ifndef MRB_NO_FLOAT
34
35
  MRB_API mrb_float
35
36
  mrb_to_flo(mrb_state *mrb, mrb_value val)
36
37
  {
37
38
  switch (mrb_type(val)) {
38
- case MRB_TT_FIXNUM:
39
- return (mrb_float)mrb_fixnum(val);
39
+ case MRB_TT_INTEGER:
40
+ return (mrb_float)mrb_integer(val);
40
41
  case MRB_TT_FLOAT:
41
42
  break;
42
- default:
43
+ case MRB_TT_STRING:
44
+ case MRB_TT_FALSE:
45
+ case MRB_TT_TRUE:
43
46
  mrb_raise(mrb, E_TYPE_ERROR, "non float value");
47
+ default:
48
+ val = mrb_type_convert(mrb, val, MRB_TT_FLOAT, MRB_SYM(to_f));
49
+ break;
44
50
  }
45
51
  return mrb_float(val);
46
52
  }
53
+ #endif
47
54
 
48
- MRB_API mrb_value
49
- mrb_int_value(mrb_state *mrb, mrb_float f)
55
+ static void
56
+ int_overflow(mrb_state *mrb, const char *reason)
50
57
  {
51
- if (FIXABLE_FLOAT(f)) {
52
- return mrb_fixnum_value((mrb_int)f);
53
- }
54
- return mrb_float_value(mrb, f);
58
+ mrb_raisef(mrb, E_RANGE_ERROR, "integer overflow in %s", reason);
59
+ }
60
+
61
+ static void
62
+ int_zerodiv(mrb_state *mrb)
63
+ {
64
+ mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0");
55
65
  }
56
- #endif
57
66
 
58
67
  /*
59
68
  * call-seq:
@@ -65,82 +74,91 @@ mrb_int_value(mrb_state *mrb, mrb_float f)
65
74
  * 2.0**3 #=> 8.0
66
75
  */
67
76
  static mrb_value
68
- integral_pow(mrb_state *mrb, mrb_value x)
77
+ int_pow(mrb_state *mrb, mrb_value x)
69
78
  {
70
- mrb_value y;
71
- #ifndef MRB_WITHOUT_FLOAT
72
- mrb_float d;
73
- #endif
74
-
75
- mrb_get_args(mrb, "o", &y);
76
- if (mrb_fixnum_p(x) && mrb_fixnum_p(y)) {
77
- /* try ipow() */
78
- mrb_int base = mrb_fixnum(x);
79
- mrb_int exp = mrb_fixnum(y);
80
- mrb_int result = 1;
79
+ mrb_int base = mrb_int(mrb, x);
80
+ mrb_int exp;
81
+ #ifndef MRB_NO_FLOAT
82
+ mrb_value y = mrb_get_arg1(mrb);
83
+ mrb_float z;
81
84
 
82
- if (exp < 0)
83
- #ifdef MRB_WITHOUT_FLOAT
84
- return mrb_fixnum_value(0);
85
+ if (!mrb_integer_p(y)) {
86
+ mrb_get_args(mrb, "f", &z);
87
+ z = pow((mrb_float)base, z);
88
+ return mrb_float_value(mrb, z);
89
+ }
90
+ else {
91
+ mrb_get_args(mrb, "i", &exp);
92
+ z = pow((double)base, (double)exp);
93
+ if (exp < 0 || z < (mrb_float)MRB_INT_MIN || (mrb_float)MRB_INT_MAX < z) {
94
+ return mrb_float_value(mrb, z);
95
+ }
96
+ }
97
+ return mrb_int_value(mrb, (mrb_int)z);
85
98
  #else
86
- goto float_pow;
87
- #endif
88
- for (;;) {
89
- if (exp & 1) {
90
- if (mrb_int_mul_overflow(result, base, &result)) {
91
- #ifndef MRB_WITHOUT_FLOAT
92
- goto float_pow;
93
- #endif
94
- }
95
- }
96
- exp >>= 1;
97
- if (exp == 0) break;
98
- if (mrb_int_mul_overflow(base, base, &base)) {
99
- #ifndef MRB_WITHOUT_FLOAT
100
- goto float_pow;
101
- #endif
99
+ mrb_int result = 1;
100
+
101
+ mrb_get_args(mrb, "i", &exp);
102
+ if (exp < 0) {
103
+ return mrb_fixnum_value(0);
104
+ }
105
+ for (;;) {
106
+ if (exp & 1) {
107
+ if (mrb_int_mul_overflow(result, base, &result)) {
108
+ int_overflow(mrb, "multiplication");
102
109
  }
103
110
  }
104
- return mrb_fixnum_value(result);
111
+ exp >>= 1;
112
+ if (exp == 0) break;
113
+ if (mrb_int_mul_overflow(base, base, &base)) {
114
+ int_overflow(mrb, "multiplication");
115
+ }
105
116
  }
106
- #ifdef MRB_WITHOUT_FLOAT
107
- mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
108
- #else
109
- float_pow:
110
- d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y));
111
- return mrb_float_value(mrb, d);
117
+ return mrb_int_value(mrb, result);
112
118
  #endif
113
119
  }
114
120
 
115
- static mrb_value
116
- integral_idiv(mrb_state *mrb, mrb_value x)
117
- {
118
- #ifdef MRB_WITHOUT_FLOAT
119
- mrb_value y;
120
121
 
121
- mrb_get_args(mrb, "o", &y);
122
- if (!mrb_fixnum_p(y)) {
123
- mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
122
+ mrb_int
123
+ mrb_num_div_int(mrb_state *mrb, mrb_int x, mrb_int y)
124
+ {
125
+ if (y == 0) {
126
+ int_zerodiv(mrb);
124
127
  }
125
- return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
126
- #else
127
- mrb_float y;
128
+ else if(x == MRB_INT_MIN && y == -1) {
129
+ int_overflow(mrb, "division");
130
+ }
131
+ else {
132
+ mrb_int div = x / y;
128
133
 
129
- mrb_get_args(mrb, "f", &y);
130
- return mrb_int_value(mrb, mrb_to_flo(mrb, x) / y);
131
- #endif
134
+ if ((x ^ y) < 0 && x != div * y) {
135
+ div -= 1;
136
+ }
137
+ return div;
138
+ }
139
+ /* not reached */
140
+ return 0;
132
141
  }
133
142
 
134
143
  /* 15.2.8.3.4 */
135
144
  /* 15.2.9.3.4 */
136
145
  /*
137
146
  * call-seq:
138
- * num / other -> num
147
+ * int / other -> int
139
148
  *
140
149
  * Performs division: the class of the resulting object depends on
141
150
  * the class of <code>num</code> and on the magnitude of the
142
151
  * result.
143
152
  */
153
+ static mrb_value
154
+ int_div(mrb_state *mrb, mrb_value xv)
155
+ {
156
+ mrb_int y, div;
157
+
158
+ mrb_get_args(mrb, "i", &y);
159
+ div = mrb_num_div_int(mrb, mrb_integer(xv), y);
160
+ return mrb_int_value(mrb, div);
161
+ }
144
162
 
145
163
  /* 15.2.9.3.19(x) */
146
164
  /*
@@ -151,32 +169,35 @@ integral_idiv(mrb_state *mrb, mrb_value x)
151
169
  */
152
170
 
153
171
  static mrb_value
154
- integral_div(mrb_state *mrb, mrb_value x)
172
+ int_quo(mrb_state *mrb, mrb_value xv)
155
173
  {
156
- #ifdef MRB_WITHOUT_FLOAT
157
- mrb_value y;
174
+ #ifdef MRB_NO_FLOAT
175
+ mrb_int y;
158
176
 
159
- mrb_get_args(mrb, "o", &y);
160
- if (!mrb_fixnum_p(y)) {
161
- mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
177
+ mrb_get_args(mrb, "i", &y);
178
+ if (y == 0) {
179
+ int_zerodiv(mrb);
162
180
  }
163
- return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
181
+ return mrb_fixnum_value(mrb_integer(xv) / y);
164
182
  #else
165
183
  mrb_float y;
166
184
 
167
185
  mrb_get_args(mrb, "f", &y);
168
- return mrb_float_value(mrb, mrb_to_flo(mrb, x) / y);
186
+ if (y == 0) {
187
+ int_zerodiv(mrb);
188
+ }
189
+ return mrb_float_value(mrb, mrb_integer(xv) / y);
169
190
  #endif
170
191
  }
171
192
 
172
193
  static mrb_value
173
- integral_coerce_step_counter(mrb_state *mrb, mrb_value self)
194
+ coerce_step_counter(mrb_state *mrb, mrb_value self)
174
195
  {
175
196
  mrb_value num, step;
176
197
 
177
198
  mrb_get_args(mrb, "oo", &num, &step);
178
199
 
179
- #ifndef MRB_WITHOUT_FLOAT
200
+ #ifndef MRB_NO_FLOAT
180
201
  if (mrb_float_p(self) || mrb_float_p(num) || mrb_float_p(step)) {
181
202
  return mrb_Float(mrb, self);
182
203
  }
@@ -185,7 +206,7 @@ integral_coerce_step_counter(mrb_state *mrb, mrb_value self)
185
206
  return self;
186
207
  }
187
208
 
188
- #ifndef MRB_WITHOUT_FLOAT
209
+ #ifndef MRB_NO_FLOAT
189
210
  /********************************************************************
190
211
  *
191
212
  * Document-class: Float
@@ -195,41 +216,94 @@ integral_coerce_step_counter(mrb_state *mrb, mrb_value self)
195
216
  * representation.
196
217
  */
197
218
 
219
+ static mrb_value
220
+ flo_pow(mrb_state *mrb, mrb_value x)
221
+ {
222
+ mrb_value y = mrb_get_arg1(mrb);
223
+ mrb_float d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y));
224
+ return mrb_float_value(mrb, d);
225
+ }
226
+
227
+ static mrb_value
228
+ flo_idiv(mrb_state *mrb, mrb_value xv)
229
+ {
230
+ mrb_int y, div;
231
+
232
+ mrb_get_args(mrb, "i", &y);
233
+ div = mrb_num_div_int(mrb, (mrb_int)mrb_float(xv), y);
234
+ return mrb_int_value(mrb, (mrb_int)div);
235
+ }
236
+
237
+ mrb_float
238
+ mrb_num_div_flo(mrb_state *mrb, mrb_float x, mrb_float y)
239
+ {
240
+ mrb_float f;
241
+
242
+ if (y == 0) {
243
+ if (x > 0) f = INFINITY;
244
+ else if (x < 0) f = -INFINITY;
245
+ else /* if (x == 0) */ f = NAN;
246
+ }
247
+ else {
248
+ f = x / y;
249
+ }
250
+ return f;
251
+ }
252
+
253
+ static mrb_value
254
+ flo_div(mrb_state *mrb, mrb_value xv)
255
+ {
256
+ mrb_float x, y;
257
+
258
+ x = mrb_float(xv);
259
+ mrb_get_args(mrb, "f", &y);
260
+ x = mrb_num_div_flo(mrb, x, y);
261
+ return mrb_float_value(mrb, x);
262
+ }
263
+
198
264
  /* 15.2.9.3.16(x) */
199
265
  /*
200
266
  * call-seq:
201
267
  * flt.to_s -> string
268
+ * flt.inspect -> string
202
269
  *
203
270
  * Returns a string containing a representation of self. As well as a
204
271
  * fixed or exponential form of the number, the call may return
205
272
  * "<code>NaN</code>", "<code>Infinity</code>", and
206
273
  * "<code>-Infinity</code>".
274
+ *
275
+ * 3.0.to_s #=> 3.0
276
+ * 3.25.to_s #=> 3.25
207
277
  */
208
278
 
209
279
  static mrb_value
210
280
  flo_to_s(mrb_state *mrb, mrb_value flt)
211
281
  {
212
282
  mrb_float f = mrb_float(flt);
283
+ mrb_value str;
213
284
 
214
285
  if (isinf(f)) {
215
- return f < 0 ? mrb_str_new_lit(mrb, "-Infinity")
216
- : mrb_str_new_lit(mrb, "Infinity");
286
+ str = f < 0 ? mrb_str_new_lit(mrb, "-Infinity")
287
+ : mrb_str_new_lit(mrb, "Infinity");
288
+ goto exit;
217
289
  }
218
290
  else if (isnan(f)) {
219
- return mrb_str_new_lit(mrb, "NaN");
291
+ str = mrb_str_new_lit(mrb, "NaN");
292
+ goto exit;
220
293
  }
221
294
  else {
222
295
  char fmt[] = "%." MRB_STRINGIZE(FLO_TO_STR_PREC) "g";
223
- mrb_value str = mrb_float_to_str(mrb, flt, fmt);
224
296
  mrb_int len;
225
297
  char *begp, *p, *endp;
226
298
 
299
+ str = mrb_float_to_str(mrb, flt, fmt);
300
+
227
301
  insert_dot_zero:
228
302
  begp = RSTRING_PTR(str);
229
303
  len = RSTRING_LEN(str);
230
304
  for (p = begp, endp = p + len; p < endp; ++p) {
231
305
  if (*p == '.') {
232
- return str;
306
+ goto exit;
233
307
  }
234
308
  else if (*p == 'e') {
235
309
  ptrdiff_t e_pos = p - begp;
@@ -237,7 +311,7 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
237
311
  p = RSTRING_PTR(str) + e_pos;
238
312
  memmove(p + 2, p, len - e_pos);
239
313
  memcpy(p, ".0", 2);
240
- return str;
314
+ goto exit;
241
315
  }
242
316
  }
243
317
 
@@ -246,9 +320,16 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
246
320
  str = mrb_float_to_str(mrb, flt, fmt);
247
321
  goto insert_dot_zero;
248
322
  }
323
+ else {
324
+ mrb_str_cat(mrb, str, ".0", 2);
325
+ }
249
326
 
250
- return str;
327
+ goto exit;
251
328
  }
329
+
330
+ exit:
331
+ RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
332
+ return str;
252
333
  }
253
334
 
254
335
  /* 15.2.9.3.2 */
@@ -263,9 +344,8 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
263
344
  static mrb_value
264
345
  flo_minus(mrb_state *mrb, mrb_value x)
265
346
  {
266
- mrb_value y;
347
+ mrb_value y = mrb_get_arg1(mrb);
267
348
 
268
- mrb_get_args(mrb, "o", &y);
269
349
  return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
270
350
  }
271
351
 
@@ -281,9 +361,8 @@ flo_minus(mrb_state *mrb, mrb_value x)
281
361
  static mrb_value
282
362
  flo_mul(mrb_state *mrb, mrb_value x)
283
363
  {
284
- mrb_value y;
364
+ mrb_value y = mrb_get_arg1(mrb);
285
365
 
286
- mrb_get_args(mrb, "o", &y);
287
366
  return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
288
367
  }
289
368
 
@@ -343,11 +422,9 @@ flodivmod(mrb_state *mrb, double x, double y, mrb_float *divp, mrb_float *modp)
343
422
  static mrb_value
344
423
  flo_mod(mrb_state *mrb, mrb_value x)
345
424
  {
346
- mrb_value y;
425
+ mrb_value y = mrb_get_arg1(mrb);
347
426
  mrb_float mod;
348
427
 
349
- mrb_get_args(mrb, "o", &y);
350
-
351
428
  flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), 0, &mod);
352
429
  return mrb_float_value(mrb, mod);
353
430
  }
@@ -366,22 +443,20 @@ flo_mod(mrb_state *mrb, mrb_value x)
366
443
  * (1.0).eql?(1.0) #=> true
367
444
  */
368
445
  static mrb_value
369
- fix_eql(mrb_state *mrb, mrb_value x)
446
+ int_eql(mrb_state *mrb, mrb_value x)
370
447
  {
371
- mrb_value y;
448
+ mrb_value y = mrb_get_arg1(mrb);
372
449
 
373
- mrb_get_args(mrb, "o", &y);
374
- if (!mrb_fixnum_p(y)) return mrb_false_value();
375
- return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y));
450
+ if (!mrb_integer_p(y)) return mrb_false_value();
451
+ return mrb_bool_value(mrb_integer(x) == mrb_integer(y));
376
452
  }
377
453
 
378
- #ifndef MRB_WITHOUT_FLOAT
454
+ #ifndef MRB_NO_FLOAT
379
455
  static mrb_value
380
456
  flo_eql(mrb_state *mrb, mrb_value x)
381
457
  {
382
- mrb_value y;
458
+ mrb_value y = mrb_get_arg1(mrb);
383
459
 
384
- mrb_get_args(mrb, "o", &y);
385
460
  if (!mrb_float_p(y)) return mrb_false_value();
386
461
  return mrb_bool_value(mrb_float(x) == mrb_float(y));
387
462
  }
@@ -402,12 +477,11 @@ flo_eql(mrb_state *mrb, mrb_value x)
402
477
  static mrb_value
403
478
  flo_eq(mrb_state *mrb, mrb_value x)
404
479
  {
405
- mrb_value y;
406
- mrb_get_args(mrb, "o", &y);
480
+ mrb_value y = mrb_get_arg1(mrb);
407
481
 
408
482
  switch (mrb_type(y)) {
409
- case MRB_TT_FIXNUM:
410
- return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_fixnum(y));
483
+ case MRB_TT_INTEGER:
484
+ return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_integer(y));
411
485
  case MRB_TT_FLOAT:
412
486
  return mrb_bool_value(mrb_float(x) == mrb_float(y));
413
487
  default:
@@ -419,11 +493,15 @@ static int64_t
419
493
  value_int64(mrb_state *mrb, mrb_value x)
420
494
  {
421
495
  switch (mrb_type(x)) {
422
- case MRB_TT_FIXNUM:
423
- return (int64_t)mrb_fixnum(x);
424
- break;
496
+ case MRB_TT_INTEGER:
497
+ return (int64_t)mrb_integer(x);
425
498
  case MRB_TT_FLOAT:
426
- return (int64_t)mrb_float(x);
499
+ {
500
+ double f = mrb_float(x);
501
+
502
+ if ((mrb_float)INT64_MAX >= f && f >= (mrb_float)INT64_MIN)
503
+ return (int64_t)f;
504
+ }
427
505
  default:
428
506
  mrb_raise(mrb, E_TYPE_ERROR, "cannot convert to Integer");
429
507
  break;
@@ -435,28 +513,26 @@ value_int64(mrb_state *mrb, mrb_value x)
435
513
  static mrb_value
436
514
  int64_value(mrb_state *mrb, int64_t v)
437
515
  {
438
- if (TYPED_FIXABLE(v,int64_t)) {
439
- return mrb_fixnum_value((mrb_int)v);
516
+ if (!TYPED_FIXABLE(v,int64_t)) {
517
+ int_overflow(mrb, "bit operation");
440
518
  }
441
- return mrb_float_value(mrb, (mrb_float)v);
519
+ return mrb_fixnum_value((mrb_int)v);
442
520
  }
443
521
 
444
522
  static mrb_value
445
523
  flo_rev(mrb_state *mrb, mrb_value x)
446
524
  {
447
- int64_t v1;
448
- v1 = (int64_t)mrb_float(x);
525
+ int64_t v1 = value_int64(mrb, x);
449
526
  return int64_value(mrb, ~v1);
450
527
  }
451
528
 
452
529
  static mrb_value
453
530
  flo_and(mrb_state *mrb, mrb_value x)
454
531
  {
455
- mrb_value y;
532
+ mrb_value y = mrb_get_arg1(mrb);
456
533
  int64_t v1, v2;
457
- mrb_get_args(mrb, "o", &y);
458
534
 
459
- v1 = (int64_t)mrb_float(x);
535
+ v1 = value_int64(mrb, x);
460
536
  v2 = value_int64(mrb, y);
461
537
  return int64_value(mrb, v1 & v2);
462
538
  }
@@ -464,11 +540,10 @@ flo_and(mrb_state *mrb, mrb_value x)
464
540
  static mrb_value
465
541
  flo_or(mrb_state *mrb, mrb_value x)
466
542
  {
467
- mrb_value y;
543
+ mrb_value y = mrb_get_arg1(mrb);
468
544
  int64_t v1, v2;
469
- mrb_get_args(mrb, "o", &y);
470
545
 
471
- v1 = (int64_t)mrb_float(x);
546
+ v1 = value_int64(mrb, x);
472
547
  v2 = value_int64(mrb, y);
473
548
  return int64_value(mrb, v1 | v2);
474
549
  }
@@ -476,11 +551,10 @@ flo_or(mrb_state *mrb, mrb_value x)
476
551
  static mrb_value
477
552
  flo_xor(mrb_state *mrb, mrb_value x)
478
553
  {
479
- mrb_value y;
554
+ mrb_value y = mrb_get_arg1(mrb);
480
555
  int64_t v1, v2;
481
- mrb_get_args(mrb, "o", &y);
482
556
 
483
- v1 = (int64_t)mrb_float(x);
557
+ v1 = value_int64(mrb, x);
484
558
  v2 = value_int64(mrb, y);
485
559
  return int64_value(mrb, v1 ^ v2);
486
560
  }
@@ -494,6 +568,10 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
494
568
  return x;
495
569
  }
496
570
  val = mrb_float(x);
571
+ if (width < -MRB_INT_BIT/2) {
572
+ if (val < 0) return mrb_fixnum_value(-1);
573
+ return mrb_fixnum_value(0);
574
+ }
497
575
  if (width < 0) {
498
576
  while (width++) {
499
577
  val /= 2;
@@ -520,7 +598,9 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
520
598
  val *= 2;
521
599
  }
522
600
  }
523
- return mrb_int_value(mrb, val);
601
+ if (FIXABLE_FLOAT(val))
602
+ return mrb_int_value(mrb, (mrb_int)val);
603
+ return mrb_float_value(mrb, val);
524
604
  }
525
605
 
526
606
  static mrb_value
@@ -529,6 +609,7 @@ flo_rshift(mrb_state *mrb, mrb_value x)
529
609
  mrb_int width;
530
610
 
531
611
  mrb_get_args(mrb, "i", &width);
612
+ if (width == MRB_INT_MIN) return flo_shift(mrb, x, -MRB_INT_BIT);
532
613
  return flo_shift(mrb, x, -width);
533
614
  }
534
615
 
@@ -626,7 +707,7 @@ flo_floor(mrb_state *mrb, mrb_value num)
626
707
  mrb_float f = floor(mrb_float(num));
627
708
 
628
709
  mrb_check_num_exact(mrb, f);
629
- return mrb_int_value(mrb, f);
710
+ return mrb_int_value(mrb, (mrb_int)f);
630
711
  }
631
712
 
632
713
  /* 15.2.9.3.8 */
@@ -649,7 +730,7 @@ flo_ceil(mrb_state *mrb, mrb_value num)
649
730
  mrb_float f = ceil(mrb_float(num));
650
731
 
651
732
  mrb_check_num_exact(mrb, f);
652
- return mrb_int_value(mrb, f);
733
+ return mrb_int_value(mrb, (mrb_int)f);
653
734
  }
654
735
 
655
736
  /* 15.2.9.3.12 */
@@ -731,7 +812,9 @@ flo_round(mrb_state *mrb, mrb_value num)
731
812
  if (!isfinite(number)) return num;
732
813
  return mrb_float_value(mrb, number);
733
814
  }
734
- return mrb_int_value(mrb, number);
815
+ if (!FIXABLE_FLOAT(number))
816
+ return mrb_float_value(mrb, number);
817
+ return mrb_int_value(mrb, (mrb_int)number);
735
818
  }
736
819
 
737
820
  /* 15.2.9.3.14 */
@@ -753,7 +836,7 @@ flo_truncate(mrb_state *mrb, mrb_value num)
753
836
  if (f < 0.0) f = ceil(f);
754
837
 
755
838
  mrb_check_num_exact(mrb, f);
756
- return mrb_int_value(mrb, f);
839
+ return mrb_int_value(mrb, (mrb_int)f);
757
840
  }
758
841
 
759
842
  static mrb_value
@@ -766,8 +849,7 @@ flo_nan_p(mrb_state *mrb, mrb_value num)
766
849
  /*
767
850
  * Document-class: Integer
768
851
  *
769
- * <code>Integer</code> is the basis for the two concrete classes that
770
- * hold whole numbers, <code>Bignum</code> and <code>Fixnum</code>.
852
+ * <code>Integer</code> is hold whole numbers.
771
853
  *
772
854
  */
773
855
 
@@ -791,20 +873,18 @@ fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
791
873
  {
792
874
  mrb_int a;
793
875
 
794
- a = mrb_fixnum(x);
795
- if (mrb_fixnum_p(y)) {
876
+ a = mrb_integer(x);
877
+ if (mrb_integer_p(y)) {
796
878
  mrb_int b, c;
797
879
 
798
880
  if (a == 0) return x;
799
- b = mrb_fixnum(y);
881
+ b = mrb_integer(y);
800
882
  if (mrb_int_mul_overflow(a, b, &c)) {
801
- #ifndef MRB_WITHOUT_FLOAT
802
- return mrb_float_value(mrb, (mrb_float)a * (mrb_float)b);
803
- #endif
883
+ int_overflow(mrb, "multiplication");
804
884
  }
805
885
  return mrb_fixnum_value(c);
806
886
  }
807
- #ifdef MRB_WITHOUT_FLOAT
887
+ #ifdef MRB_NO_FLOAT
808
888
  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
809
889
  #else
810
890
  return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y));
@@ -814,10 +894,10 @@ fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
814
894
  MRB_API mrb_value
815
895
  mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y)
816
896
  {
817
- if (mrb_fixnum_p(x)) {
897
+ if (mrb_integer_p(x)) {
818
898
  return fixnum_mul(mrb, x, y);
819
899
  }
820
- #ifndef MRB_WITHOUT_FLOAT
900
+ #ifndef MRB_NO_FLOAT
821
901
  if (mrb_float_p(x)) {
822
902
  return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
823
903
  }
@@ -837,40 +917,33 @@ mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y)
837
917
  */
838
918
 
839
919
  static mrb_value
840
- fix_mul(mrb_state *mrb, mrb_value x)
920
+ int_mul(mrb_state *mrb, mrb_value x)
841
921
  {
842
- mrb_value y;
922
+ mrb_value y = mrb_get_arg1(mrb);
843
923
 
844
- mrb_get_args(mrb, "o", &y);
845
924
  return fixnum_mul(mrb, x, y);
846
925
  }
847
926
 
848
927
  static void
849
928
  fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
850
929
  {
851
- mrb_int div, mod;
852
-
853
- /* TODO: add mrb_assert(y != 0) to make sure */
854
-
855
- if (y < 0) {
856
- if (x < 0)
857
- div = -x / -y;
858
- else
859
- div = - (x / -y);
930
+ if (y == 0) {
931
+ int_zerodiv(mrb);
860
932
  }
861
- else {
862
- if (x < 0)
863
- div = - (-x / y);
864
- else
865
- div = x / y;
933
+ else if(x == MRB_INT_MIN && y == -1) {
934
+ int_overflow(mrb, "division");
866
935
  }
867
- mod = x - div*y;
868
- if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) {
869
- mod += y;
870
- div -= 1;
936
+ else {
937
+ mrb_int div = x / y;
938
+ mrb_int mod = x - div * y;
939
+
940
+ if ((x ^ y) < 0 && x != div * y) {
941
+ mod += y;
942
+ div -= 1;
943
+ }
944
+ if (divp) *divp = div;
945
+ if (modp) *modp = mod;
871
946
  }
872
- if (divp) *divp = div;
873
- if (modp) *modp = mod;
874
947
  }
875
948
 
876
949
  /* 15.2.8.3.5 */
@@ -884,30 +957,19 @@ fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
884
957
  */
885
958
 
886
959
  static mrb_value
887
- fix_mod(mrb_state *mrb, mrb_value x)
960
+ int_mod(mrb_state *mrb, mrb_value x)
888
961
  {
889
- mrb_value y;
962
+ mrb_value y = mrb_get_arg1(mrb);
890
963
  mrb_int a, b;
891
964
 
892
- mrb_get_args(mrb, "o", &y);
893
- a = mrb_fixnum(x);
894
- if (mrb_fixnum_p(y) && a != MRB_INT_MIN && (b=mrb_fixnum(y)) != MRB_INT_MIN) {
965
+ a = mrb_integer(x);
966
+ if (mrb_integer_p(y) && a != MRB_INT_MIN && (b=mrb_integer(y)) != MRB_INT_MIN) {
895
967
  mrb_int mod;
896
968
 
897
- if (b == 0) {
898
- #ifdef MRB_WITHOUT_FLOAT
899
- /* ZeroDivisionError */
900
- return mrb_fixnum_value(0);
901
- #else
902
- if (a > 0) return mrb_float_value(mrb, INFINITY);
903
- if (a < 0) return mrb_float_value(mrb, INFINITY);
904
- return mrb_float_value(mrb, NAN);
905
- #endif
906
- }
907
969
  fixdivmod(mrb, a, b, NULL, &mod);
908
970
  return mrb_fixnum_value(mod);
909
971
  }
910
- #ifdef MRB_WITHOUT_FLOAT
972
+ #ifdef MRB_NO_FLOAT
911
973
  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
912
974
  #else
913
975
  else {
@@ -926,55 +988,41 @@ fix_mod(mrb_state *mrb, mrb_value x)
926
988
  * See <code>Numeric#divmod</code>.
927
989
  */
928
990
  static mrb_value
929
- fix_divmod(mrb_state *mrb, mrb_value x)
991
+ int_divmod(mrb_state *mrb, mrb_value x)
930
992
  {
931
- mrb_value y;
932
-
933
- mrb_get_args(mrb, "o", &y);
993
+ mrb_value y = mrb_get_arg1(mrb);
934
994
 
935
- if (mrb_fixnum_p(y)) {
995
+ if (mrb_integer_p(y)) {
936
996
  mrb_int div, mod;
937
997
 
938
- if (mrb_fixnum(y) == 0) {
939
- #ifdef MRB_WITHOUT_FLOAT
940
- return mrb_assoc_new(mrb, mrb_fixnum_value(0), mrb_fixnum_value(0));
941
- #else
942
- return mrb_assoc_new(mrb, ((mrb_fixnum(x) == 0) ?
943
- mrb_float_value(mrb, NAN):
944
- mrb_float_value(mrb, INFINITY)),
945
- mrb_float_value(mrb, NAN));
946
- #endif
947
- }
948
- fixdivmod(mrb, mrb_fixnum(x), mrb_fixnum(y), &div, &mod);
949
- return mrb_assoc_new(mrb, mrb_fixnum_value(div), mrb_fixnum_value(mod));
998
+ fixdivmod(mrb, mrb_integer(x), mrb_integer(y), &div, &mod);
999
+ return mrb_assoc_new(mrb, mrb_int_value(mrb, div), mrb_int_value(mrb, mod));
950
1000
  }
951
- #ifdef MRB_WITHOUT_FLOAT
1001
+ #ifdef MRB_NO_FLOAT
952
1002
  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
953
1003
  #else
954
1004
  else {
955
1005
  mrb_float div, mod;
956
1006
  mrb_value a, b;
957
1007
 
958
- flodivmod(mrb, (mrb_float)mrb_fixnum(x), mrb_to_flo(mrb, y), &div, &mod);
959
- a = mrb_int_value(mrb, div);
1008
+ flodivmod(mrb, (mrb_float)mrb_integer(x), mrb_to_flo(mrb, y), &div, &mod);
1009
+ a = mrb_int_value(mrb, (mrb_int)div);
960
1010
  b = mrb_float_value(mrb, mod);
961
1011
  return mrb_assoc_new(mrb, a, b);
962
1012
  }
963
1013
  #endif
964
1014
  }
965
1015
 
966
- #ifndef MRB_WITHOUT_FLOAT
1016
+ #ifndef MRB_NO_FLOAT
967
1017
  static mrb_value
968
1018
  flo_divmod(mrb_state *mrb, mrb_value x)
969
1019
  {
970
- mrb_value y;
1020
+ mrb_value y = mrb_get_arg1(mrb);
971
1021
  mrb_float div, mod;
972
1022
  mrb_value a, b;
973
1023
 
974
- mrb_get_args(mrb, "o", &y);
975
-
976
1024
  flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), &div, &mod);
977
- a = mrb_int_value(mrb, div);
1025
+ a = mrb_int_value(mrb, (mrb_int)div);
978
1026
  b = mrb_float_value(mrb, mod);
979
1027
  return mrb_assoc_new(mrb, a, b);
980
1028
  }
@@ -993,17 +1041,16 @@ flo_divmod(mrb_state *mrb, mrb_value x)
993
1041
  */
994
1042
 
995
1043
  static mrb_value
996
- fix_equal(mrb_state *mrb, mrb_value x)
1044
+ int_equal(mrb_state *mrb, mrb_value x)
997
1045
  {
998
- mrb_value y;
1046
+ mrb_value y = mrb_get_arg1(mrb);
999
1047
 
1000
- mrb_get_args(mrb, "o", &y);
1001
1048
  switch (mrb_type(y)) {
1002
- case MRB_TT_FIXNUM:
1003
- return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y));
1004
- #ifndef MRB_WITHOUT_FLOAT
1049
+ case MRB_TT_INTEGER:
1050
+ return mrb_bool_value(mrb_integer(x) == mrb_integer(y));
1051
+ #ifndef MRB_NO_FLOAT
1005
1052
  case MRB_TT_FLOAT:
1006
- return mrb_bool_value((mrb_float)mrb_fixnum(x) == mrb_float(y));
1053
+ return mrb_bool_value((mrb_float)mrb_integer(x) == mrb_float(y));
1007
1054
  #endif
1008
1055
  default:
1009
1056
  return mrb_false_value();
@@ -1022,24 +1069,24 @@ fix_equal(mrb_state *mrb, mrb_value x)
1022
1069
  */
1023
1070
 
1024
1071
  static mrb_value
1025
- fix_rev(mrb_state *mrb, mrb_value num)
1072
+ int_rev(mrb_state *mrb, mrb_value num)
1026
1073
  {
1027
- mrb_int val = mrb_fixnum(num);
1074
+ mrb_int val = mrb_integer(num);
1028
1075
 
1029
- return mrb_fixnum_value(~val);
1076
+ return mrb_int_value(mrb, ~val);
1030
1077
  }
1031
1078
 
1032
- #ifdef MRB_WITHOUT_FLOAT
1079
+ #ifdef MRB_NO_FLOAT
1033
1080
  #define bit_op(x,y,op1,op2) do {\
1034
- return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\
1081
+ return mrb_int_value(mrb, (mrb_integer(x) op2 mrb_integer(y)));\
1035
1082
  } while(0)
1036
1083
  #else
1037
1084
  static mrb_value flo_and(mrb_state *mrb, mrb_value x);
1038
1085
  static mrb_value flo_or(mrb_state *mrb, mrb_value x);
1039
1086
  static mrb_value flo_xor(mrb_state *mrb, mrb_value x);
1040
1087
  #define bit_op(x,y,op1,op2) do {\
1041
- if (mrb_fixnum_p(y)) return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\
1042
- return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)mrb_fixnum(x)));\
1088
+ if (mrb_integer_p(y)) return mrb_int_value(mrb, (mrb_integer(x) op2 mrb_integer(y))); \
1089
+ return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)mrb_integer(x)));\
1043
1090
  } while(0)
1044
1091
  #endif
1045
1092
 
@@ -1052,11 +1099,10 @@ static mrb_value flo_xor(mrb_state *mrb, mrb_value x);
1052
1099
  */
1053
1100
 
1054
1101
  static mrb_value
1055
- fix_and(mrb_state *mrb, mrb_value x)
1102
+ int_and(mrb_state *mrb, mrb_value x)
1056
1103
  {
1057
- mrb_value y;
1104
+ mrb_value y = mrb_get_arg1(mrb);
1058
1105
 
1059
- mrb_get_args(mrb, "o", &y);
1060
1106
  bit_op(x, y, and, &);
1061
1107
  }
1062
1108
 
@@ -1069,11 +1115,10 @@ fix_and(mrb_state *mrb, mrb_value x)
1069
1115
  */
1070
1116
 
1071
1117
  static mrb_value
1072
- fix_or(mrb_state *mrb, mrb_value x)
1118
+ int_or(mrb_state *mrb, mrb_value x)
1073
1119
  {
1074
- mrb_value y;
1120
+ mrb_value y = mrb_get_arg1(mrb);
1075
1121
 
1076
- mrb_get_args(mrb, "o", &y);
1077
1122
  bit_op(x, y, or, |);
1078
1123
  }
1079
1124
 
@@ -1086,11 +1131,10 @@ fix_or(mrb_state *mrb, mrb_value x)
1086
1131
  */
1087
1132
 
1088
1133
  static mrb_value
1089
- fix_xor(mrb_state *mrb, mrb_value x)
1134
+ int_xor(mrb_state *mrb, mrb_value x)
1090
1135
  {
1091
- mrb_value y;
1136
+ mrb_value y = mrb_get_arg1(mrb);
1092
1137
 
1093
- mrb_get_args(mrb, "o", &y);
1094
1138
  bit_op(x, y, or, ^);
1095
1139
  }
1096
1140
 
@@ -1099,61 +1143,34 @@ fix_xor(mrb_state *mrb, mrb_value x)
1099
1143
  static mrb_value
1100
1144
  lshift(mrb_state *mrb, mrb_int val, mrb_int width)
1101
1145
  {
1102
- if (width < 0) { /* mrb_int overflow */
1103
- #ifdef MRB_WITHOUT_FLOAT
1104
- return mrb_fixnum_value(0);
1105
- #else
1106
- return mrb_float_value(mrb, INFINITY);
1107
- #endif
1108
- }
1146
+ mrb_assert(width >= 0);
1109
1147
  if (val > 0) {
1110
1148
  if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
1111
1149
  (val > (MRB_INT_MAX >> width))) {
1112
- #ifdef MRB_WITHOUT_FLOAT
1113
- return mrb_fixnum_value(-1);
1114
- #else
1115
- goto bit_overflow;
1116
- #endif
1150
+ int_overflow(mrb, "bit shift");
1117
1151
  }
1118
- return mrb_fixnum_value(val << width);
1152
+ return mrb_int_value(mrb, val << width);
1119
1153
  }
1120
1154
  else {
1121
1155
  if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
1122
1156
  (val <= (MRB_INT_MIN >> width))) {
1123
- #ifdef MRB_WITHOUT_FLOAT
1124
- return mrb_fixnum_value(0);
1125
- #else
1126
- goto bit_overflow;
1127
- #endif
1128
- }
1129
- return mrb_fixnum_value(val * ((mrb_int)1 << width));
1130
- }
1131
-
1132
- #ifndef MRB_WITHOUT_FLOAT
1133
- bit_overflow:
1134
- {
1135
- mrb_float f = (mrb_float)val;
1136
- while (width--) {
1137
- f *= 2;
1157
+ int_overflow(mrb, "bit shift");
1138
1158
  }
1139
- return mrb_float_value(mrb, f);
1159
+ return mrb_int_value(mrb, (val * ((mrb_int)1 << width)));
1140
1160
  }
1141
- #endif
1142
1161
  }
1143
1162
 
1144
1163
  static mrb_value
1145
- rshift(mrb_int val, mrb_int width)
1164
+ rshift(mrb_state *mrb, mrb_int val, mrb_int width)
1146
1165
  {
1147
- if (width < 0) { /* mrb_int overflow */
1148
- return mrb_fixnum_value(0);
1149
- }
1166
+ mrb_assert(width >= 0);
1150
1167
  if (width >= NUMERIC_SHIFT_WIDTH_MAX) {
1151
1168
  if (val < 0) {
1152
1169
  return mrb_fixnum_value(-1);
1153
1170
  }
1154
1171
  return mrb_fixnum_value(0);
1155
1172
  }
1156
- return mrb_fixnum_value(val >> width);
1173
+ return mrb_int_value(mrb, val >> width);
1157
1174
  }
1158
1175
 
1159
1176
  /* 15.2.8.3.12 */
@@ -1165,7 +1182,7 @@ rshift(mrb_int val, mrb_int width)
1165
1182
  */
1166
1183
 
1167
1184
  static mrb_value
1168
- fix_lshift(mrb_state *mrb, mrb_value x)
1185
+ int_lshift(mrb_state *mrb, mrb_value x)
1169
1186
  {
1170
1187
  mrb_int width, val;
1171
1188
 
@@ -1173,10 +1190,11 @@ fix_lshift(mrb_state *mrb, mrb_value x)
1173
1190
  if (width == 0) {
1174
1191
  return x;
1175
1192
  }
1176
- val = mrb_fixnum(x);
1193
+ val = mrb_integer(x);
1177
1194
  if (val == 0) return x;
1178
1195
  if (width < 0) {
1179
- return rshift(val, -width);
1196
+ if (width == MRB_INT_MIN) return rshift(mrb, val, MRB_INT_BIT);
1197
+ return rshift(mrb, val, -width);
1180
1198
  }
1181
1199
  return lshift(mrb, val, width);
1182
1200
  }
@@ -1190,7 +1208,7 @@ fix_lshift(mrb_state *mrb, mrb_value x)
1190
1208
  */
1191
1209
 
1192
1210
  static mrb_value
1193
- fix_rshift(mrb_state *mrb, mrb_value x)
1211
+ int_rshift(mrb_state *mrb, mrb_value x)
1194
1212
  {
1195
1213
  mrb_int width, val;
1196
1214
 
@@ -1198,12 +1216,13 @@ fix_rshift(mrb_state *mrb, mrb_value x)
1198
1216
  if (width == 0) {
1199
1217
  return x;
1200
1218
  }
1201
- val = mrb_fixnum(x);
1219
+ val = mrb_integer(x);
1202
1220
  if (val == 0) return x;
1203
1221
  if (width < 0) {
1222
+ if (width == MRB_INT_MIN) int_overflow(mrb, "bit shift");
1204
1223
  return lshift(mrb, val, -width);
1205
1224
  }
1206
- return rshift(val, width);
1225
+ return rshift(mrb, val, width);
1207
1226
  }
1208
1227
 
1209
1228
  /* 15.2.8.3.23 */
@@ -1215,11 +1234,11 @@ fix_rshift(mrb_state *mrb, mrb_value x)
1215
1234
  *
1216
1235
  */
1217
1236
 
1218
- #ifndef MRB_WITHOUT_FLOAT
1237
+ #ifndef MRB_NO_FLOAT
1219
1238
  static mrb_value
1220
- fix_to_f(mrb_state *mrb, mrb_value num)
1239
+ int_to_f(mrb_state *mrb, mrb_value num)
1221
1240
  {
1222
- return mrb_float_value(mrb, (mrb_float)mrb_fixnum(num));
1241
+ return mrb_float_value(mrb, (mrb_float)mrb_integer(num));
1223
1242
  }
1224
1243
 
1225
1244
  /*
@@ -1256,7 +1275,7 @@ mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x)
1256
1275
  mrb_raisef(mrb, E_RANGE_ERROR, "number (%v) too big for integer", x);
1257
1276
  }
1258
1277
  }
1259
- return mrb_fixnum_value(z);
1278
+ return mrb_int_value(mrb, z);
1260
1279
  }
1261
1280
  #endif
1262
1281
 
@@ -1265,20 +1284,18 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
1265
1284
  {
1266
1285
  mrb_int a;
1267
1286
 
1268
- a = mrb_fixnum(x);
1269
- if (mrb_fixnum_p(y)) {
1287
+ a = mrb_integer(x);
1288
+ if (mrb_integer_p(y)) {
1270
1289
  mrb_int b, c;
1271
1290
 
1272
1291
  if (a == 0) return y;
1273
- b = mrb_fixnum(y);
1292
+ b = mrb_integer(y);
1274
1293
  if (mrb_int_add_overflow(a, b, &c)) {
1275
- #ifndef MRB_WITHOUT_FLOAT
1276
- return mrb_float_value(mrb, (mrb_float)a + (mrb_float)b);
1277
- #endif
1294
+ int_overflow(mrb, "addition");
1278
1295
  }
1279
- return mrb_fixnum_value(c);
1296
+ return mrb_int_value(mrb, c);
1280
1297
  }
1281
- #ifdef MRB_WITHOUT_FLOAT
1298
+ #ifdef MRB_NO_FLOAT
1282
1299
  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
1283
1300
  #else
1284
1301
  return mrb_float_value(mrb, (mrb_float)a + mrb_to_flo(mrb, y));
@@ -1288,10 +1305,10 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
1288
1305
  MRB_API mrb_value
1289
1306
  mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y)
1290
1307
  {
1291
- if (mrb_fixnum_p(x)) {
1308
+ if (mrb_integer_p(x)) {
1292
1309
  return fixnum_plus(mrb, x, y);
1293
1310
  }
1294
- #ifndef MRB_WITHOUT_FLOAT
1311
+ #ifndef MRB_NO_FLOAT
1295
1312
  if (mrb_float_p(x)) {
1296
1313
  return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
1297
1314
  }
@@ -1310,11 +1327,10 @@ mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y)
1310
1327
  * result.
1311
1328
  */
1312
1329
  static mrb_value
1313
- fix_plus(mrb_state *mrb, mrb_value self)
1330
+ int_plus(mrb_state *mrb, mrb_value self)
1314
1331
  {
1315
- mrb_value other;
1332
+ mrb_value other = mrb_get_arg1(mrb);
1316
1333
 
1317
- mrb_get_args(mrb, "o", &other);
1318
1334
  return fixnum_plus(mrb, self, other);
1319
1335
  }
1320
1336
 
@@ -1323,19 +1339,17 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
1323
1339
  {
1324
1340
  mrb_int a;
1325
1341
 
1326
- a = mrb_fixnum(x);
1327
- if (mrb_fixnum_p(y)) {
1342
+ a = mrb_integer(x);
1343
+ if (mrb_integer_p(y)) {
1328
1344
  mrb_int b, c;
1329
1345
 
1330
- b = mrb_fixnum(y);
1346
+ b = mrb_integer(y);
1331
1347
  if (mrb_int_sub_overflow(a, b, &c)) {
1332
- #ifndef MRB_WITHOUT_FLOAT
1333
- return mrb_float_value(mrb, (mrb_float)a - (mrb_float)b);
1334
- #endif
1348
+ int_overflow(mrb, "subtraction");
1335
1349
  }
1336
- return mrb_fixnum_value(c);
1350
+ return mrb_int_value(mrb, c);
1337
1351
  }
1338
- #ifdef MRB_WITHOUT_FLOAT
1352
+ #ifdef MRB_NO_FLOAT
1339
1353
  mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
1340
1354
  #else
1341
1355
  return mrb_float_value(mrb, (mrb_float)a - mrb_to_flo(mrb, y));
@@ -1345,10 +1359,10 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
1345
1359
  MRB_API mrb_value
1346
1360
  mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y)
1347
1361
  {
1348
- if (mrb_fixnum_p(x)) {
1362
+ if (mrb_integer_p(x)) {
1349
1363
  return fixnum_minus(mrb, x, y);
1350
1364
  }
1351
- #ifndef MRB_WITHOUT_FLOAT
1365
+ #ifndef MRB_NO_FLOAT
1352
1366
  if (mrb_float_p(x)) {
1353
1367
  return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
1354
1368
  }
@@ -1368,11 +1382,10 @@ mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y)
1368
1382
  * result.
1369
1383
  */
1370
1384
  static mrb_value
1371
- fix_minus(mrb_state *mrb, mrb_value self)
1385
+ int_minus(mrb_state *mrb, mrb_value self)
1372
1386
  {
1373
- mrb_value other;
1387
+ mrb_value other = mrb_get_arg1(mrb);
1374
1388
 
1375
- mrb_get_args(mrb, "o", &other);
1376
1389
  return fixnum_minus(mrb, self, other);
1377
1390
  }
1378
1391
 
@@ -1382,7 +1395,8 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
1382
1395
  {
1383
1396
  char buf[MRB_INT_BIT+1];
1384
1397
  char *b = buf + sizeof buf;
1385
- mrb_int val = mrb_fixnum(x);
1398
+ mrb_int val = mrb_integer(x);
1399
+ mrb_value str;
1386
1400
 
1387
1401
  if (base < 2 || 36 < base) {
1388
1402
  mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %i", base);
@@ -1403,7 +1417,9 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
1403
1417
  } while (val /= base);
1404
1418
  }
1405
1419
 
1406
- return mrb_str_new(mrb, b, buf + sizeof(buf) - b);
1420
+ str = mrb_str_new(mrb, b, buf + sizeof(buf) - b);
1421
+ RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
1422
+ return str;
1407
1423
  }
1408
1424
 
1409
1425
  /* 15.2.8.3.25 */
@@ -1423,7 +1439,7 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
1423
1439
  *
1424
1440
  */
1425
1441
  static mrb_value
1426
- fix_to_s(mrb_state *mrb, mrb_value self)
1442
+ int_to_s(mrb_state *mrb, mrb_value self)
1427
1443
  {
1428
1444
  mrb_int base = 10;
1429
1445
 
@@ -1435,26 +1451,26 @@ fix_to_s(mrb_state *mrb, mrb_value self)
1435
1451
  static mrb_int
1436
1452
  cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2)
1437
1453
  {
1438
- #ifdef MRB_WITHOUT_FLOAT
1454
+ #ifdef MRB_NO_FLOAT
1439
1455
  mrb_int x, y;
1440
1456
  #else
1441
1457
  mrb_float x, y;
1442
1458
  #endif
1443
1459
 
1444
- #ifdef MRB_WITHOUT_FLOAT
1445
- x = mrb_fixnum(v1);
1460
+ #ifdef MRB_NO_FLOAT
1461
+ x = mrb_integer(v1);
1446
1462
  #else
1447
1463
  x = mrb_to_flo(mrb, v1);
1448
1464
  #endif
1449
1465
  switch (mrb_type(v2)) {
1450
- case MRB_TT_FIXNUM:
1451
- #ifdef MRB_WITHOUT_FLOAT
1452
- y = mrb_fixnum(v2);
1466
+ case MRB_TT_INTEGER:
1467
+ #ifdef MRB_NO_FLOAT
1468
+ y = mrb_integer(v2);
1453
1469
  #else
1454
- y = (mrb_float)mrb_fixnum(v2);
1470
+ y = (mrb_float)mrb_integer(v2);
1455
1471
  #endif
1456
1472
  break;
1457
- #ifndef MRB_WITHOUT_FLOAT
1473
+ #ifndef MRB_NO_FLOAT
1458
1474
  case MRB_TT_FLOAT:
1459
1475
  y = mrb_float(v2);
1460
1476
  break;
@@ -1474,21 +1490,21 @@ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2)
1474
1490
  /* 15.2.9.3.6 */
1475
1491
  /*
1476
1492
  * call-seq:
1477
- * self.f <=> other.f => -1, 0, +1
1493
+ * self.f <=> other.f => -1, 0, +1, or nil
1478
1494
  * < => -1
1479
1495
  * = => 0
1480
1496
  * > => +1
1481
1497
  * Comparison---Returns -1, 0, or +1 depending on whether <i>fix</i> is
1482
1498
  * less than, equal to, or greater than <i>numeric</i>. This is the
1483
- * basis for the tests in <code>Comparable</code>.
1499
+ * basis for the tests in <code>Comparable</code>. When the operands are
1500
+ * not comparable, it returns nil instead of raising an exception.
1484
1501
  */
1485
1502
  static mrb_value
1486
- integral_cmp(mrb_state *mrb, mrb_value self)
1503
+ num_cmp(mrb_state *mrb, mrb_value self)
1487
1504
  {
1488
- mrb_value other;
1505
+ mrb_value other = mrb_get_arg1(mrb);
1489
1506
  mrb_int n;
1490
1507
 
1491
- mrb_get_args(mrb, "o", &other);
1492
1508
  n = cmpnum(mrb, self, other);
1493
1509
  if (n == -2) return mrb_nil_value();
1494
1510
  return mrb_fixnum_value(n);
@@ -1501,12 +1517,11 @@ cmperr(mrb_state *mrb, mrb_value v1, mrb_value v2)
1501
1517
  }
1502
1518
 
1503
1519
  static mrb_value
1504
- integral_lt(mrb_state *mrb, mrb_value self)
1520
+ num_lt(mrb_state *mrb, mrb_value self)
1505
1521
  {
1506
- mrb_value other;
1522
+ mrb_value other = mrb_get_arg1(mrb);
1507
1523
  mrb_int n;
1508
1524
 
1509
- mrb_get_args(mrb, "o", &other);
1510
1525
  n = cmpnum(mrb, self, other);
1511
1526
  if (n == -2) cmperr(mrb, self, other);
1512
1527
  if (n < 0) return mrb_true_value();
@@ -1514,12 +1529,11 @@ integral_lt(mrb_state *mrb, mrb_value self)
1514
1529
  }
1515
1530
 
1516
1531
  static mrb_value
1517
- integral_le(mrb_state *mrb, mrb_value self)
1532
+ num_le(mrb_state *mrb, mrb_value self)
1518
1533
  {
1519
- mrb_value other;
1534
+ mrb_value other = mrb_get_arg1(mrb);
1520
1535
  mrb_int n;
1521
1536
 
1522
- mrb_get_args(mrb, "o", &other);
1523
1537
  n = cmpnum(mrb, self, other);
1524
1538
  if (n == -2) cmperr(mrb, self, other);
1525
1539
  if (n <= 0) return mrb_true_value();
@@ -1527,12 +1541,11 @@ integral_le(mrb_state *mrb, mrb_value self)
1527
1541
  }
1528
1542
 
1529
1543
  static mrb_value
1530
- integral_gt(mrb_state *mrb, mrb_value self)
1544
+ num_gt(mrb_state *mrb, mrb_value self)
1531
1545
  {
1532
- mrb_value other;
1546
+ mrb_value other = mrb_get_arg1(mrb);
1533
1547
  mrb_int n;
1534
1548
 
1535
- mrb_get_args(mrb, "o", &other);
1536
1549
  n = cmpnum(mrb, self, other);
1537
1550
  if (n == -2) cmperr(mrb, self, other);
1538
1551
  if (n > 0) return mrb_true_value();
@@ -1540,12 +1553,11 @@ integral_gt(mrb_state *mrb, mrb_value self)
1540
1553
  }
1541
1554
 
1542
1555
  static mrb_value
1543
- integral_ge(mrb_state *mrb, mrb_value self)
1556
+ num_ge(mrb_state *mrb, mrb_value self)
1544
1557
  {
1545
- mrb_value other;
1558
+ mrb_value other = mrb_get_arg1(mrb);
1546
1559
  mrb_int n;
1547
1560
 
1548
- mrb_get_args(mrb, "o", &other);
1549
1561
  n = cmpnum(mrb, self, other);
1550
1562
  if (n == -2) cmperr(mrb, self, other);
1551
1563
  if (n >= 0) return mrb_true_value();
@@ -1558,7 +1570,7 @@ mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
1558
1570
  mrb_value v;
1559
1571
 
1560
1572
  switch (mrb_type(obj1)) {
1561
- case MRB_TT_FIXNUM:
1573
+ case MRB_TT_INTEGER:
1562
1574
  case MRB_TT_FLOAT:
1563
1575
  return cmpnum(mrb, obj1, obj2);
1564
1576
  case MRB_TT_STRING:
@@ -1566,10 +1578,10 @@ mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
1566
1578
  return -2;
1567
1579
  return mrb_str_cmp(mrb, obj1, obj2);
1568
1580
  default:
1569
- v = mrb_funcall(mrb, obj1, "<=>", 1, obj2);
1570
- if (mrb_nil_p(v) || !mrb_fixnum_p(v))
1581
+ v = mrb_funcall_id(mrb, obj1, MRB_SYM(cmp), 1, obj2);
1582
+ if (mrb_nil_p(v) || !mrb_integer_p(v))
1571
1583
  return -2;
1572
- return mrb_fixnum(v);
1584
+ return mrb_integer(v);
1573
1585
  }
1574
1586
  }
1575
1587
 
@@ -1593,13 +1605,12 @@ num_infinite_p(mrb_state *mrb, mrb_value self)
1593
1605
  * Returns a new float which is the sum of <code>float</code>
1594
1606
  * and <code>other</code>.
1595
1607
  */
1596
- #ifndef MRB_WITHOUT_FLOAT
1608
+ #ifndef MRB_NO_FLOAT
1597
1609
  static mrb_value
1598
1610
  flo_plus(mrb_state *mrb, mrb_value x)
1599
1611
  {
1600
- mrb_value y;
1612
+ mrb_value y = mrb_get_arg1(mrb);
1601
1613
 
1602
- mrb_get_args(mrb, "o", &y);
1603
1614
  return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
1604
1615
  }
1605
1616
  #endif
@@ -1608,72 +1619,81 @@ flo_plus(mrb_state *mrb, mrb_value x)
1608
1619
  void
1609
1620
  mrb_init_numeric(mrb_state *mrb)
1610
1621
  {
1611
- struct RClass *numeric, *integer, *fixnum, *integral;
1612
- #ifndef MRB_WITHOUT_FLOAT
1622
+ struct RClass *numeric, *integer;
1623
+ #ifndef MRB_NO_FLOAT
1613
1624
  struct RClass *fl;
1614
1625
  #endif
1615
1626
 
1616
- integral = mrb_define_module(mrb, "Integral");
1617
- mrb_define_method(mrb, integral,"**", integral_pow, MRB_ARGS_REQ(1));
1618
- mrb_define_method(mrb, integral,"/", integral_div, MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.6 */
1619
- mrb_define_method(mrb, integral,"quo", integral_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
1620
- mrb_define_method(mrb, integral,"div", integral_idiv, MRB_ARGS_REQ(1));
1621
- mrb_define_method(mrb, integral,"<=>", integral_cmp, MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.1 */
1622
- mrb_define_method(mrb, integral,"<", integral_lt, MRB_ARGS_REQ(1));
1623
- mrb_define_method(mrb, integral,"<=", integral_le, MRB_ARGS_REQ(1));
1624
- mrb_define_method(mrb, integral,">", integral_gt, MRB_ARGS_REQ(1));
1625
- mrb_define_method(mrb, integral,">=", integral_ge, MRB_ARGS_REQ(1));
1626
- mrb_define_method(mrb, integral,"__coerce_step_counter", integral_coerce_step_counter, MRB_ARGS_REQ(2));
1627
-
1628
1627
  /* Numeric Class */
1629
1628
  numeric = mrb_define_class(mrb, "Numeric", mrb->object_class); /* 15.2.7 */
1630
1629
  mrb_define_method(mrb, numeric, "finite?", num_finite_p, MRB_ARGS_NONE());
1631
1630
  mrb_define_method(mrb, numeric, "infinite?",num_infinite_p, MRB_ARGS_NONE());
1632
1631
 
1633
1632
  /* Integer Class */
1634
- integer = mrb_define_class(mrb, "Integer", numeric); /* 15.2.8 */
1635
- MRB_SET_INSTANCE_TT(integer, MRB_TT_FIXNUM);
1633
+ mrb->integer_class = integer = mrb_define_class(mrb, "Integer", numeric); /* 15.2.8 */
1634
+ MRB_SET_INSTANCE_TT(integer, MRB_TT_INTEGER);
1636
1635
  mrb_undef_class_method(mrb, integer, "new");
1636
+ mrb_define_method(mrb, integer, "**", int_pow, MRB_ARGS_REQ(1));
1637
+ mrb_define_method(mrb, integer, "/", int_div, MRB_ARGS_REQ(1)); /* 15.2.8.3.6 */
1638
+ mrb_define_method(mrb, integer, "quo", int_quo, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
1639
+ mrb_define_method(mrb, integer, "div", int_div, MRB_ARGS_REQ(1));
1640
+ mrb_define_method(mrb, integer, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */
1641
+ mrb_define_method(mrb, integer, "<", num_lt, MRB_ARGS_REQ(1));
1642
+ mrb_define_method(mrb, integer, "<=", num_le, MRB_ARGS_REQ(1));
1643
+ mrb_define_method(mrb, integer, ">", num_gt, MRB_ARGS_REQ(1));
1644
+ mrb_define_method(mrb, integer, ">=", num_ge, MRB_ARGS_REQ(1));
1645
+
1637
1646
  mrb_define_method(mrb, integer, "to_i", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.24 */
1638
1647
  mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE());
1639
- #ifndef MRB_WITHOUT_FLOAT
1640
- mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.8 (x) */
1641
- mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.10 (x) */
1642
- mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.12 (x) */
1643
- mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.15 (x) */
1648
+ #ifndef MRB_NO_FLOAT
1649
+ mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.14 */
1650
+ mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.17 */
1651
+ mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.20 */
1652
+ mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.26 */
1644
1653
  #endif
1645
1654
 
1646
- /* Fixnum Class */
1647
- mrb->fixnum_class = fixnum = mrb_define_class(mrb, "Fixnum", integer);
1648
- mrb_define_method(mrb, fixnum, "+", fix_plus, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */
1649
- mrb_define_method(mrb, fixnum, "-", fix_minus, MRB_ARGS_REQ(1)); /* 15.2.8.3.2 */
1650
- mrb_define_method(mrb, fixnum, "*", fix_mul, MRB_ARGS_REQ(1)); /* 15.2.8.3.3 */
1651
- mrb_define_method(mrb, fixnum, "%", fix_mod, MRB_ARGS_REQ(1)); /* 15.2.8.3.5 */
1652
- mrb_define_method(mrb, fixnum, "==", fix_equal, MRB_ARGS_REQ(1)); /* 15.2.8.3.7 */
1653
- mrb_define_method(mrb, fixnum, "~", fix_rev, MRB_ARGS_NONE()); /* 15.2.8.3.8 */
1654
- mrb_define_method(mrb, fixnum, "&", fix_and, MRB_ARGS_REQ(1)); /* 15.2.8.3.9 */
1655
- mrb_define_method(mrb, fixnum, "|", fix_or, MRB_ARGS_REQ(1)); /* 15.2.8.3.10 */
1656
- mrb_define_method(mrb, fixnum, "^", fix_xor, MRB_ARGS_REQ(1)); /* 15.2.8.3.11 */
1657
- mrb_define_method(mrb, fixnum, "<<", fix_lshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.12 */
1658
- mrb_define_method(mrb, fixnum, ">>", fix_rshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.13 */
1659
- mrb_define_method(mrb, fixnum, "eql?", fix_eql, MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
1660
- #ifndef MRB_WITHOUT_FLOAT
1661
- mrb_define_method(mrb, fixnum, "to_f", fix_to_f, MRB_ARGS_NONE()); /* 15.2.8.3.23 */
1655
+ mrb_define_method(mrb, integer, "+", int_plus, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */
1656
+ mrb_define_method(mrb, integer, "-", int_minus, MRB_ARGS_REQ(1)); /* 15.2.8.3.2 */
1657
+ mrb_define_method(mrb, integer, "*", int_mul, MRB_ARGS_REQ(1)); /* 15.2.8.3.3 */
1658
+ mrb_define_method(mrb, integer, "%", int_mod, MRB_ARGS_REQ(1)); /* 15.2.8.3.5 */
1659
+ mrb_define_method(mrb, integer, "==", int_equal, MRB_ARGS_REQ(1)); /* 15.2.8.3.7 */
1660
+ mrb_define_method(mrb, integer, "~", int_rev, MRB_ARGS_NONE()); /* 15.2.8.3.8 */
1661
+ mrb_define_method(mrb, integer, "&", int_and, MRB_ARGS_REQ(1)); /* 15.2.8.3.9 */
1662
+ mrb_define_method(mrb, integer, "|", int_or, MRB_ARGS_REQ(1)); /* 15.2.8.3.10 */
1663
+ mrb_define_method(mrb, integer, "^", int_xor, MRB_ARGS_REQ(1)); /* 15.2.8.3.11 */
1664
+ mrb_define_method(mrb, integer, "<<", int_lshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.12 */
1665
+ mrb_define_method(mrb, integer, ">>", int_rshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.13 */
1666
+ mrb_define_method(mrb, integer, "eql?", int_eql, MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
1667
+ #ifndef MRB_NO_FLOAT
1668
+ mrb_define_method(mrb, integer, "to_f", int_to_f, MRB_ARGS_NONE()); /* 15.2.8.3.23 */
1662
1669
  #endif
1663
- mrb_define_method(mrb, fixnum, "to_s", fix_to_s, MRB_ARGS_OPT(1)); /* 15.2.8.3.25 */
1664
- mrb_define_method(mrb, fixnum, "inspect", fix_to_s, MRB_ARGS_OPT(1));
1665
- mrb_define_method(mrb, fixnum, "divmod", fix_divmod, MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */
1670
+ mrb_define_method(mrb, integer, "to_s", int_to_s, MRB_ARGS_OPT(1)); /* 15.2.8.3.25 */
1671
+ mrb_define_method(mrb, integer, "inspect", int_to_s, MRB_ARGS_OPT(1));
1672
+ mrb_define_method(mrb, integer, "divmod", int_divmod, MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */
1673
+ mrb_define_method(mrb, integer, "__coerce_step_counter", coerce_step_counter, MRB_ARGS_REQ(2));
1666
1674
 
1667
- #ifndef MRB_WITHOUT_FLOAT
1675
+ /* Fixnum Class for compatibility */
1676
+ mrb_define_const(mrb, mrb->object_class, "Fixnum", mrb_obj_value(integer));
1677
+
1678
+ #ifndef MRB_NO_FLOAT
1668
1679
  /* Float Class */
1669
1680
  mrb->float_class = fl = mrb_define_class(mrb, "Float", numeric); /* 15.2.9 */
1670
1681
  MRB_SET_INSTANCE_TT(fl, MRB_TT_FLOAT);
1671
1682
  mrb_undef_class_method(mrb, fl, "new");
1672
- mrb_define_method(mrb, fl, "+", flo_plus, MRB_ARGS_REQ(1)); /* 15.2.9.3.1 */
1673
- mrb_define_method(mrb, fl, "-", flo_minus, MRB_ARGS_REQ(1)); /* 15.2.9.3.2 */
1674
- mrb_define_method(mrb, fl, "*", flo_mul, MRB_ARGS_REQ(1)); /* 15.2.9.3.3 */
1675
- mrb_define_method(mrb, fl, "%", flo_mod, MRB_ARGS_REQ(1)); /* 15.2.9.3.5 */
1676
- mrb_define_method(mrb, fl, "==", flo_eq, MRB_ARGS_REQ(1)); /* 15.2.9.3.7 */
1683
+ mrb_define_method(mrb, fl, "**", flo_pow, MRB_ARGS_REQ(1));
1684
+ mrb_define_method(mrb, fl, "/", flo_div, MRB_ARGS_REQ(1)); /* 15.2.9.3.6 */
1685
+ mrb_define_method(mrb, fl, "quo", flo_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
1686
+ mrb_define_method(mrb, fl, "div", flo_idiv, MRB_ARGS_REQ(1));
1687
+ mrb_define_method(mrb, fl, "+", flo_plus, MRB_ARGS_REQ(1)); /* 15.2.9.3.3 */
1688
+ mrb_define_method(mrb, fl, "-", flo_minus, MRB_ARGS_REQ(1)); /* 15.2.9.3.4 */
1689
+ mrb_define_method(mrb, fl, "*", flo_mul, MRB_ARGS_REQ(1)); /* 15.2.9.3.5 */
1690
+ mrb_define_method(mrb, fl, "%", flo_mod, MRB_ARGS_REQ(1)); /* 15.2.9.3.7 */
1691
+ mrb_define_method(mrb, fl, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.9.3.1 */
1692
+ mrb_define_method(mrb, fl, "<", num_lt, MRB_ARGS_REQ(1));
1693
+ mrb_define_method(mrb, fl, "<=", num_le, MRB_ARGS_REQ(1));
1694
+ mrb_define_method(mrb, fl, ">", num_gt, MRB_ARGS_REQ(1));
1695
+ mrb_define_method(mrb, fl, ">=", num_ge, MRB_ARGS_REQ(1));
1696
+ mrb_define_method(mrb, fl, "==", flo_eq, MRB_ARGS_REQ(1)); /* 15.2.9.3.2 */
1677
1697
  mrb_define_method(mrb, fl, "~", flo_rev, MRB_ARGS_NONE());
1678
1698
  mrb_define_method(mrb, fl, "&", flo_and, MRB_ARGS_REQ(1));
1679
1699
  mrb_define_method(mrb, fl, "|", flo_or, MRB_ARGS_REQ(1));
@@ -1697,12 +1717,10 @@ mrb_init_numeric(mrb_state *mrb)
1697
1717
  mrb_define_method(mrb, fl, "nan?", flo_nan_p, MRB_ARGS_NONE());
1698
1718
 
1699
1719
  #ifdef INFINITY
1700
- mrb_define_const(mrb, fl, "INFINITY", mrb_float_value(mrb, INFINITY));
1720
+ mrb_define_const_id(mrb, fl, MRB_SYM(INFINITY), mrb_float_value(mrb, INFINITY));
1701
1721
  #endif
1702
1722
  #ifdef NAN
1703
- mrb_define_const(mrb, fl, "NAN", mrb_float_value(mrb, NAN));
1723
+ mrb_define_const_id(mrb, fl, MRB_SYM(NAN), mrb_float_value(mrb, NAN));
1704
1724
  #endif
1705
-
1706
- mrb_include_module(mrb, fl, integral);
1707
1725
  #endif
1708
1726
  }