script_core 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }