script_core 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +35 -57
  3. data/.ruby-version +1 -1
  4. data/Gemfile +2 -2
  5. data/README.md +7 -1
  6. data/ext/enterprise_script_service/Rakefile +1 -1
  7. data/ext/enterprise_script_service/libseccomp/.travis.yml +24 -12
  8. data/ext/enterprise_script_service/libseccomp/CHANGELOG +32 -0
  9. data/ext/enterprise_script_service/libseccomp/CONTRIBUTING.md +37 -26
  10. data/ext/enterprise_script_service/libseccomp/CREDITS +11 -0
  11. data/ext/enterprise_script_service/libseccomp/README.md +21 -1
  12. data/ext/enterprise_script_service/libseccomp/configure.ac +13 -8
  13. data/ext/enterprise_script_service/libseccomp/doc/Makefile.am +6 -0
  14. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_api_get.3 +12 -2
  15. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_arch_add.3 +38 -6
  16. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_attr_set.3 +53 -2
  17. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_export_bpf.3 +20 -2
  18. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_init.3 +9 -2
  19. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_load.3 +32 -2
  20. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_merge.3 +16 -2
  21. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_alloc.3 +113 -0
  22. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_fd.3 +1 -0
  23. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_free.3 +1 -0
  24. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_id_valid.3 +1 -0
  25. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_receive.3 +1 -0
  26. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_respond.3 +1 -0
  27. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_rule_add.3 +64 -3
  28. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_syscall_priority.3 +18 -3
  29. data/ext/enterprise_script_service/libseccomp/include/seccomp-syscalls.h +19 -0
  30. data/ext/enterprise_script_service/libseccomp/include/seccomp.h.in +116 -0
  31. data/ext/enterprise_script_service/libseccomp/src/.gitignore +2 -0
  32. data/ext/enterprise_script_service/libseccomp/src/Makefile.am +31 -17
  33. data/ext/enterprise_script_service/libseccomp/src/api.c +254 -58
  34. data/ext/enterprise_script_service/libseccomp/src/arch-aarch64.h +1 -9
  35. data/ext/enterprise_script_service/libseccomp/src/arch-arm.c +47 -2
  36. data/ext/enterprise_script_service/libseccomp/src/arch-arm.h +1 -9
  37. data/ext/enterprise_script_service/libseccomp/src/arch-gperf-generate +40 -0
  38. data/ext/enterprise_script_service/libseccomp/src/arch-mips.c +41 -4
  39. data/ext/enterprise_script_service/libseccomp/src/arch-mips.h +2 -10
  40. data/ext/enterprise_script_service/libseccomp/src/arch-mips64.c +41 -4
  41. data/ext/enterprise_script_service/libseccomp/src/arch-mips64.h +3 -11
  42. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.c +41 -4
  43. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.h +2 -10
  44. data/ext/enterprise_script_service/libseccomp/src/arch-parisc.h +1 -10
  45. data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.c +3 -3
  46. data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.h +29 -0
  47. data/ext/enterprise_script_service/libseccomp/src/arch-ppc.h +1 -9
  48. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.c +606 -8
  49. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.h +2 -10
  50. data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.c +31 -0
  51. data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.h +22 -0
  52. data/ext/enterprise_script_service/libseccomp/src/arch-s390.c +171 -12
  53. data/ext/enterprise_script_service/libseccomp/src/arch-s390.h +1 -17
  54. data/ext/enterprise_script_service/libseccomp/src/arch-s390x.c +166 -10
  55. data/ext/enterprise_script_service/libseccomp/src/arch-s390x.h +1 -20
  56. data/ext/enterprise_script_service/libseccomp/src/arch-syscall-dump.c +8 -1
  57. data/ext/enterprise_script_service/libseccomp/src/arch-syscall-validate +359 -143
  58. data/ext/enterprise_script_service/libseccomp/src/arch-x32.c +36 -2
  59. data/ext/enterprise_script_service/libseccomp/src/arch-x32.h +2 -10
  60. data/ext/enterprise_script_service/libseccomp/src/arch-x86.c +172 -10
  61. data/ext/enterprise_script_service/libseccomp/src/arch-x86.h +1 -14
  62. data/ext/enterprise_script_service/libseccomp/src/arch-x86_64.h +1 -9
  63. data/ext/enterprise_script_service/libseccomp/src/arch.c +11 -3
  64. data/ext/enterprise_script_service/libseccomp/src/arch.h +7 -0
  65. data/ext/enterprise_script_service/libseccomp/src/db.c +268 -57
  66. data/ext/enterprise_script_service/libseccomp/src/db.h +16 -2
  67. data/ext/enterprise_script_service/libseccomp/src/gen_bpf.c +503 -148
  68. data/ext/enterprise_script_service/libseccomp/src/gen_bpf.h +2 -1
  69. data/ext/enterprise_script_service/libseccomp/src/gen_pfc.c +165 -37
  70. data/ext/enterprise_script_service/libseccomp/src/python/libseccomp.pxd +37 -1
  71. data/ext/enterprise_script_service/libseccomp/src/python/seccomp.pyx +295 -5
  72. data/ext/enterprise_script_service/libseccomp/src/syscalls.c +56 -0
  73. data/ext/enterprise_script_service/libseccomp/src/syscalls.csv +470 -0
  74. data/ext/enterprise_script_service/libseccomp/src/syscalls.h +62 -0
  75. data/ext/enterprise_script_service/libseccomp/src/syscalls.perf.template +82 -0
  76. data/ext/enterprise_script_service/libseccomp/src/system.c +196 -16
  77. data/ext/enterprise_script_service/libseccomp/src/system.h +68 -13
  78. data/ext/enterprise_script_service/libseccomp/tests/.gitignore +10 -2
  79. data/ext/enterprise_script_service/libseccomp/tests/06-sim-actions.tests +1 -1
  80. data/ext/enterprise_script_service/libseccomp/tests/11-basic-basic_errors.c +5 -5
  81. data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.c +35 -1
  82. data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.py +10 -1
  83. data/ext/enterprise_script_service/libseccomp/tests/15-basic-resolver.c +4 -3
  84. data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.c +12 -0
  85. data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.py +1 -0
  86. data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.c → 18-sim-basic_allowlist.c} +0 -0
  87. data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.py → 18-sim-basic_allowlist.py} +0 -0
  88. data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_allowlist.tests +32 -0
  89. data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.c +3 -0
  90. data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.py +1 -0
  91. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.c +3 -0
  92. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.py +1 -0
  93. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.tests +33 -17
  94. data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.c → 34-sim-basic_denylist.c} +0 -0
  95. data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.py → 34-sim-basic_denylist.py} +0 -0
  96. data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_denylist.tests +32 -0
  97. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.c +3 -0
  98. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.py +1 -0
  99. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.tests +25 -25
  100. data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.c +24 -3
  101. data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.py +16 -1
  102. data/ext/enterprise_script_service/libseccomp/tests/47-live-kill_process.c +3 -3
  103. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.c +112 -0
  104. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.py +60 -0
  105. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.tests +11 -0
  106. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.c +48 -0
  107. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.py +38 -0
  108. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.tests +11 -0
  109. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.c +156 -0
  110. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.py +95 -0
  111. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.tests +65 -0
  112. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.c +128 -0
  113. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.py +95 -0
  114. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.tests +11 -0
  115. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.c +134 -0
  116. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.sh +46 -0
  117. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.tests +11 -0
  118. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.c +90 -0
  119. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.py +65 -0
  120. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.tests +11 -0
  121. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.c +64 -0
  122. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.py +46 -0
  123. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.tests +11 -0
  124. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.c +116 -0
  125. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.py +61 -0
  126. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.tests +11 -0
  127. data/ext/enterprise_script_service/libseccomp/tests/Makefile.am +34 -10
  128. data/ext/enterprise_script_service/libseccomp/tests/regression +10 -3
  129. data/ext/enterprise_script_service/libseccomp/tests/util.c +3 -3
  130. data/ext/enterprise_script_service/libseccomp/tools/Makefile.am +0 -3
  131. data/ext/enterprise_script_service/libseccomp/tools/check-syntax +1 -1
  132. data/ext/enterprise_script_service/libseccomp/tools/scmp_arch_detect.c +3 -0
  133. data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_disasm.c +4 -2
  134. data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_sim.c +4 -0
  135. data/ext/enterprise_script_service/libseccomp/tools/util.c +14 -12
  136. data/ext/enterprise_script_service/libseccomp/tools/util.h +7 -0
  137. data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +149 -0
  138. data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +55 -0
  139. data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
  140. data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
  141. data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
  142. data/ext/enterprise_script_service/mruby/.gitignore +3 -0
  143. data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
  144. data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
  145. data/ext/enterprise_script_service/mruby/.travis.yml +7 -10
  146. data/ext/enterprise_script_service/mruby/.yamllint +8 -0
  147. data/ext/enterprise_script_service/mruby/AUTHORS +4 -0
  148. data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
  149. data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
  150. data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
  151. data/ext/enterprise_script_service/mruby/LICENSE +1 -1
  152. data/ext/enterprise_script_service/mruby/Makefile +1 -1
  153. data/ext/enterprise_script_service/mruby/README.md +5 -11
  154. data/ext/enterprise_script_service/mruby/Rakefile +18 -108
  155. data/ext/enterprise_script_service/mruby/TODO.md +17 -0
  156. data/ext/enterprise_script_service/mruby/appveyor.yml +29 -26
  157. data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
  158. data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
  159. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +4 -21
  160. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +4 -4
  161. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +3 -20
  162. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +4 -21
  163. data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
  164. data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
  165. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_android_armeabi_v7a_neon_hard.rb → build_config/android_armeabi_v7a_neon_hard.rb} +0 -15
  166. data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
  167. data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
  168. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +4 -21
  169. data/ext/enterprise_script_service/mruby/{appveyor_config.rb → build_config/ci/gcc-clang.rb} +11 -8
  170. data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
  171. data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
  172. data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
  173. data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
  174. data/ext/enterprise_script_service/mruby/build_config/dreamcast_shelf.rb +94 -0
  175. data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
  176. data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
  177. data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
  178. data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
  179. data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
  180. data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
  181. data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
  182. data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
  183. data/ext/enterprise_script_service/mruby/doc/guides/compile.md +142 -49
  184. data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
  185. data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
  186. data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +53 -30
  187. data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
  188. data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
  189. data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
  190. data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
  191. data/ext/enterprise_script_service/mruby/doc/opcode.md +102 -103
  192. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
  193. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
  194. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
  195. data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
  196. data/ext/enterprise_script_service/mruby/include/mrbconf.h +88 -66
  197. data/ext/enterprise_script_service/mruby/include/mruby.h +160 -104
  198. data/ext/enterprise_script_service/mruby/include/mruby/array.h +27 -6
  199. data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +80 -46
  200. data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
  201. data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +76 -55
  202. data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
  203. data/ext/enterprise_script_service/mruby/include/mruby/common.h +14 -1
  204. data/ext/enterprise_script_service/mruby/include/mruby/compile.h +20 -6
  205. data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
  206. data/ext/enterprise_script_service/mruby/include/mruby/dump.h +18 -52
  207. data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
  208. data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
  209. data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
  210. data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
  211. data/ext/enterprise_script_service/mruby/include/mruby/irep.h +74 -14
  212. data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -1
  213. data/ext/enterprise_script_service/mruby/include/mruby/khash.h +19 -9
  214. data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +37 -63
  215. data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
  216. data/ext/enterprise_script_service/mruby/include/mruby/ops.h +29 -24
  217. data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
  218. data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
  219. data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
  220. data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
  221. data/ext/enterprise_script_service/mruby/include/mruby/proc.h +93 -21
  222. data/ext/enterprise_script_service/mruby/include/mruby/string.h +12 -16
  223. data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
  224. data/ext/enterprise_script_service/mruby/include/mruby/value.h +60 -59
  225. data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
  226. data/ext/enterprise_script_service/mruby/include/mruby/version.h +25 -6
  227. data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -72
  228. data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +71 -78
  229. data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
  230. data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
  231. data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +84 -32
  232. data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
  233. data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
  234. data/ext/enterprise_script_service/mruby/lib/mruby/source.rb +3 -1
  235. data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
  236. data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
  237. data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -81
  238. data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
  239. data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
  240. data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
  241. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -32
  242. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +10 -12
  243. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/test/array.rb +0 -13
  244. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +30 -18
  245. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
  246. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
  247. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
  248. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
  249. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
  250. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -4
  251. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
  252. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +6 -2
  253. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
  254. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
  255. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +46 -35
  256. data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
  257. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
  258. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +41 -28
  259. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
  260. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -2
  261. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +26 -6
  262. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
  263. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +6 -2
  264. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
  265. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
  266. data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +7 -1
  267. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +495 -436
  268. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
  269. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
  270. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +637 -220
  271. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +13734 -0
  272. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +20 -23
  273. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +2 -2
  274. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +9 -9
  275. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
  276. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
  277. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
  278. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -2
  279. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/src/exception.c +3 -3
  280. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +19 -238
  281. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/test/eval.rb +21 -0
  282. data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +19 -15
  283. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +31 -5
  284. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
  285. data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +5 -6
  286. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
  287. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +39 -7
  288. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrbgem.rake +2 -8
  289. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
  290. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +0 -16
  291. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +9 -14
  292. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +107 -59
  293. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +22 -38
  294. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +417 -203
  295. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +20 -12
  296. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +33 -2
  297. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +58 -50
  298. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +13 -14
  299. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
  300. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
  301. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +56 -73
  302. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +13 -4
  303. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
  304. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +80 -78
  305. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
  306. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
  307. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +8 -16
  308. data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -13
  309. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
  310. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
  311. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
  312. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
  313. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +120 -67
  314. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
  315. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +65 -26
  316. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +34 -21
  317. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
  318. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
  319. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
  320. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
  321. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +21 -43
  322. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
  323. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +12 -20
  324. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
  325. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
  326. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
  327. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +5 -5
  328. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
  329. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/mrbgem.rake +1 -1
  330. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
  331. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/test/sockettest.c +3 -2
  332. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +161 -93
  333. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +9 -25
  334. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
  335. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +17 -14
  336. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
  337. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +23 -36
  338. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +7 -6
  339. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
  340. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
  341. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
  342. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +17 -44
  343. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
  344. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +37 -41
  345. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
  346. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
  347. data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
  348. data/ext/enterprise_script_service/mruby/mrblib/00class.rb +10 -0
  349. data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
  350. data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
  351. data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
  352. data/ext/enterprise_script_service/mruby/mrblib/hash.rb +3 -23
  353. data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
  354. data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
  355. data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
  356. data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
  357. data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
  358. data/ext/enterprise_script_service/mruby/src/array.c +67 -90
  359. data/ext/enterprise_script_service/mruby/src/backtrace.c +18 -19
  360. data/ext/enterprise_script_service/mruby/src/class.c +819 -211
  361. data/ext/enterprise_script_service/mruby/src/codedump.c +226 -197
  362. data/ext/enterprise_script_service/mruby/src/debug.c +14 -11
  363. data/ext/enterprise_script_service/mruby/src/dump.c +470 -207
  364. data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
  365. data/ext/enterprise_script_service/mruby/src/error.c +94 -20
  366. data/ext/enterprise_script_service/mruby/src/etc.c +56 -39
  367. data/ext/enterprise_script_service/mruby/src/fmt_fp.c +103 -27
  368. data/ext/enterprise_script_service/mruby/src/gc.c +86 -349
  369. data/ext/enterprise_script_service/mruby/src/hash.c +1058 -723
  370. data/ext/enterprise_script_service/mruby/src/kernel.c +78 -226
  371. data/ext/enterprise_script_service/mruby/src/load.c +215 -159
  372. data/ext/enterprise_script_service/mruby/src/numeric.c +400 -382
  373. data/ext/enterprise_script_service/mruby/src/object.c +115 -90
  374. data/ext/enterprise_script_service/mruby/src/print.c +31 -6
  375. data/ext/enterprise_script_service/mruby/src/proc.c +56 -45
  376. data/ext/enterprise_script_service/mruby/src/range.c +49 -33
  377. data/ext/enterprise_script_service/mruby/src/state.c +58 -42
  378. data/ext/enterprise_script_service/mruby/src/string.c +151 -156
  379. data/ext/enterprise_script_service/mruby/src/symbol.c +132 -66
  380. data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
  381. data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
  382. data/ext/enterprise_script_service/mruby/src/vm.c +655 -645
  383. data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
  384. data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
  385. data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
  386. data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
  387. data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +64 -61
  388. data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
  389. data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
  390. data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
  391. data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
  392. data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
  393. data/ext/enterprise_script_service/mruby/tasks/toolchains/android.rake +46 -1
  394. data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +8 -7
  395. data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +13 -17
  396. data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +21 -25
  397. data/ext/enterprise_script_service/mruby/test/assert.rb +5 -4
  398. data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
  399. data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
  400. data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
  401. data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
  402. data/ext/enterprise_script_service/mruby/test/t/ensure.rb +8 -26
  403. data/ext/enterprise_script_service/mruby/test/t/exception.rb +2 -2
  404. data/ext/enterprise_script_service/mruby/test/t/float.rb +18 -8
  405. data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
  406. data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
  407. data/ext/enterprise_script_service/mruby/test/t/kernel.rb +16 -25
  408. data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
  409. data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
  410. data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
  411. data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
  412. data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
  413. data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
  414. data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
  415. data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
  416. data/ext/enterprise_script_service/mruby_config.rb +2 -5
  417. data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
  418. data/ext/enterprise_script_service/msgpack/.github/depends/boost.sh +56 -0
  419. data/ext/enterprise_script_service/msgpack/.github/workflows/coverage.yml +62 -0
  420. data/ext/enterprise_script_service/msgpack/.github/workflows/gha.yml +304 -0
  421. data/ext/enterprise_script_service/msgpack/CHANGELOG.md +11 -0
  422. data/ext/enterprise_script_service/msgpack/CMakeLists.txt +82 -39
  423. data/ext/enterprise_script_service/msgpack/Files.cmake +22 -12
  424. data/ext/enterprise_script_service/msgpack/QUICKSTART-C.md +26 -29
  425. data/ext/enterprise_script_service/msgpack/README.md +3 -2
  426. data/ext/enterprise_script_service/msgpack/appveyor.yml +6 -2
  427. data/ext/enterprise_script_service/msgpack/ci/build_cmake.sh +3 -1
  428. data/ext/enterprise_script_service/msgpack/cmake/CodeCoverage.cmake +55 -0
  429. data/ext/enterprise_script_service/msgpack/codecov.yml +36 -0
  430. data/ext/enterprise_script_service/msgpack/example/CMakeLists.txt +9 -5
  431. data/ext/enterprise_script_service/msgpack/example/boost/CMakeLists.txt +1 -1
  432. data/ext/enterprise_script_service/msgpack/example/c/CMakeLists.txt +17 -6
  433. data/ext/enterprise_script_service/msgpack/example/c/boundary.c +296 -0
  434. data/ext/enterprise_script_service/msgpack/example/c/jsonconv.c +419 -0
  435. data/ext/enterprise_script_service/msgpack/example/c/simple_c.c +1 -1
  436. data/ext/enterprise_script_service/msgpack/example/cpp03/CMakeLists.txt +3 -3
  437. data/ext/enterprise_script_service/msgpack/example/cpp11/CMakeLists.txt +2 -2
  438. data/ext/enterprise_script_service/msgpack/example/x3/CMakeLists.txt +2 -2
  439. data/ext/enterprise_script_service/msgpack/include/msgpack/pack.h +24 -1
  440. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/array_ref.hpp +5 -4
  441. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/boost/optional.hpp +4 -4
  442. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp17/vector_byte.hpp +8 -8
  443. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/map.hpp +4 -4
  444. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector.hpp +4 -4
  445. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_char.hpp +8 -8
  446. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_unsigned_char.hpp +8 -8
  447. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/wstring.hpp +4 -4
  448. data/ext/enterprise_script_service/msgpack/include/msgpack/v3/unpack.hpp +6 -6
  449. data/ext/enterprise_script_service/msgpack/include/msgpack/version_master.h +2 -2
  450. data/ext/enterprise_script_service/msgpack/include/msgpack/zbuffer.h +4 -4
  451. data/ext/enterprise_script_service/msgpack/make_file_list.sh +38 -11
  452. data/ext/enterprise_script_service/msgpack/src/vrefbuffer.c +6 -0
  453. data/ext/enterprise_script_service/msgpack/test/CMakeLists.txt +86 -64
  454. data/ext/enterprise_script_service/msgpack/test/array_ref.cpp +4 -0
  455. data/ext/enterprise_script_service/msgpack/test/boost_fusion.cpp +4 -0
  456. data/ext/enterprise_script_service/msgpack/test/boost_optional.cpp +4 -0
  457. data/ext/enterprise_script_service/msgpack/test/boost_string_ref.cpp +4 -1
  458. data/ext/enterprise_script_service/msgpack/test/boost_string_view.cpp +4 -0
  459. data/ext/enterprise_script_service/msgpack/test/boost_variant.cpp +4 -0
  460. data/ext/enterprise_script_service/msgpack/test/buffer.cpp +4 -47
  461. data/ext/enterprise_script_service/msgpack/test/buffer_c.cpp +148 -0
  462. data/ext/enterprise_script_service/msgpack/test/carray.cpp +4 -0
  463. data/ext/enterprise_script_service/msgpack/test/cases.cpp +8 -4
  464. data/ext/enterprise_script_service/msgpack/test/convert.cpp +8 -4
  465. data/ext/enterprise_script_service/msgpack/test/fixint.cpp +4 -0
  466. data/ext/enterprise_script_service/msgpack/test/fixint_c.cpp +4 -0
  467. data/ext/enterprise_script_service/msgpack/test/fuzz_unpack_pack_fuzzer_cpp11.cpp +4 -0
  468. data/ext/enterprise_script_service/msgpack/test/iterator_cpp11.cpp +4 -0
  469. data/ext/enterprise_script_service/msgpack/test/json.cpp +4 -0
  470. data/ext/enterprise_script_service/msgpack/test/limit.cpp +8 -4
  471. data/ext/enterprise_script_service/msgpack/test/msgpack_basic.cpp +4 -0
  472. data/ext/enterprise_script_service/msgpack/test/msgpack_c.cpp +159 -0
  473. data/ext/enterprise_script_service/msgpack/test/msgpack_container.cpp +4 -0
  474. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp11.cpp +32 -27
  475. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp17.cpp +4 -0
  476. data/ext/enterprise_script_service/msgpack/test/msgpack_stream.cpp +4 -0
  477. data/ext/enterprise_script_service/msgpack/test/msgpack_tuple.cpp +4 -1
  478. data/ext/enterprise_script_service/msgpack/test/msgpack_vref.cpp +4 -0
  479. data/ext/enterprise_script_service/msgpack/test/msgpack_x3_parse.cpp +4 -0
  480. data/ext/enterprise_script_service/msgpack/test/object.cpp +4 -1
  481. data/ext/enterprise_script_service/msgpack/test/object_with_zone.cpp +12 -8
  482. data/ext/enterprise_script_service/msgpack/test/pack_unpack.cpp +30 -26
  483. data/ext/enterprise_script_service/msgpack/test/pack_unpack_c.cpp +4 -0
  484. data/ext/enterprise_script_service/msgpack/test/raw.cpp +4 -0
  485. data/ext/enterprise_script_service/msgpack/test/reference.cpp +4 -0
  486. data/ext/enterprise_script_service/msgpack/test/reference_cpp11.cpp +4 -0
  487. data/ext/enterprise_script_service/msgpack/test/reference_wrapper_cpp11.cpp +4 -0
  488. data/ext/enterprise_script_service/msgpack/test/shared_ptr_cpp11.cpp +4 -0
  489. data/ext/enterprise_script_service/msgpack/test/size_equal_only.cpp +4 -0
  490. data/ext/enterprise_script_service/msgpack/test/streaming.cpp +8 -4
  491. data/ext/enterprise_script_service/msgpack/test/streaming_c.cpp +4 -0
  492. data/ext/enterprise_script_service/msgpack/test/unique_ptr_cpp11.cpp +4 -0
  493. data/ext/enterprise_script_service/msgpack/test/user_class.cpp +16 -12
  494. data/ext/enterprise_script_service/msgpack/test/version.cpp +4 -0
  495. data/ext/enterprise_script_service/msgpack/test/visitor.cpp +4 -0
  496. data/ext/enterprise_script_service/msgpack/test/zone.cpp +4 -0
  497. data/lib/script_core/engine.rb +24 -5
  498. data/lib/script_core/executable.rb +4 -3
  499. data/lib/script_core/version.rb +1 -1
  500. data/lib/tasks/script_core.rake +3 -1
  501. data/script_core.gemspec +1 -2
  502. data/spec/dummy/app/lib/script_engine.rb +64 -5
  503. data/spec/script_core_spec.rb +13 -0
  504. metadata +123 -61
  505. data/ext/enterprise_script_service/libseccomp/src/arch-aarch64-syscalls.c +0 -559
  506. data/ext/enterprise_script_service/libseccomp/src/arch-arm-syscalls.c +0 -570
  507. data/ext/enterprise_script_service/libseccomp/src/arch-mips-syscalls.c +0 -562
  508. data/ext/enterprise_script_service/libseccomp/src/arch-mips64-syscalls.c +0 -562
  509. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32-syscalls.c +0 -562
  510. data/ext/enterprise_script_service/libseccomp/src/arch-parisc-syscalls.c +0 -542
  511. data/ext/enterprise_script_service/libseccomp/src/arch-ppc-syscalls.c +0 -559
  512. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64-syscalls.c +0 -559
  513. data/ext/enterprise_script_service/libseccomp/src/arch-s390-syscalls.c +0 -626
  514. data/ext/enterprise_script_service/libseccomp/src/arch-s390x-syscalls.c +0 -626
  515. data/ext/enterprise_script_service/libseccomp/src/arch-x32-syscalls.c +0 -558
  516. data/ext/enterprise_script_service/libseccomp/src/arch-x86-syscalls.c +0 -692
  517. data/ext/enterprise_script_service/libseccomp/src/arch-x86_64-syscalls.c +0 -559
  518. data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_whitelist.tests +0 -32
  519. data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_blacklist.tests +0 -32
  520. data/ext/enterprise_script_service/mruby/TODO +0 -8
  521. data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
  522. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
  523. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
  524. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
  525. data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
  526. data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
  527. data/ext/enterprise_script_service/mruby/src/mruby_core.rake +0 -19
  528. data/ext/enterprise_script_service/mruby/travis_config.rb +0 -54
  529. data/ext/enterprise_script_service/msgpack/.travis.yml +0 -258
@@ -32,8 +32,8 @@
32
32
  end
33
33
 
34
34
  assert("return class of Kernel.rand") do
35
- assert_kind_of(Fixnum, rand(3))
36
- assert_kind_of(Fixnum, rand(1.5))
35
+ assert_kind_of(Integer, rand(3))
36
+ assert_kind_of(Integer, rand(1.5))
37
37
  assert_kind_of(Float, rand)
38
38
  assert_kind_of(Float, rand(0.5))
39
39
  end
@@ -11,6 +11,7 @@ class Range
11
11
  # (10..20).first(3) #=> [10, 11, 12]
12
12
  #
13
13
  def first(*args)
14
+ raise RangeError, "cannot get the first element of beginless range" if self.begin.nil?
14
15
  return self.begin if args.empty?
15
16
 
16
17
  raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1
@@ -26,14 +27,42 @@ def first(*args)
26
27
  ary
27
28
  end
28
29
 
30
+ ##
31
+ # call-seq:
32
+ # rng.last -> obj
33
+ # rng.last(n) -> an_array
34
+ #
35
+ # Returns the last object in the range,
36
+ # or an array of the last +n+ elements.
37
+ #
38
+ # Note that with no arguments +last+ will return the object that defines
39
+ # the end of the range even if #exclude_end? is +true+.
40
+ #
41
+ # (10..20).last #=> 20
42
+ # (10...20).last #=> 20
43
+ # (10..20).last(3) #=> [18, 19, 20]
44
+ # (10...20).last(3) #=> [17, 18, 19]
45
+ def last(*args)
46
+ raise RangeError, "cannot get the last element of endless range" if self.end.nil?
47
+ return self.end if args.empty?
48
+
49
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1
50
+ nv = args[0]
51
+ n = nv.__to_int
52
+ raise ArgumentError, "negative array size (or size too big)" unless 0 <= n
53
+ return self.to_a.last(nv)
54
+ end
55
+
29
56
  def max(&block)
30
- val = self.first
31
- last = self.last
57
+ val = self.begin
58
+ last = self.end
32
59
  return super if block
33
60
 
61
+ raise RangeError, "cannot get the maximum of endless range" if last.nil?
62
+
34
63
  # fast path for numerics
35
64
  if val.kind_of?(Numeric) && last.kind_of?(Numeric)
36
- raise TypeError if exclude_end? && !last.kind_of?(Fixnum)
65
+ raise TypeError if exclude_end? && !last.kind_of?(Integer)
37
66
  return nil if val > last
38
67
  return nil if val == last && exclude_end?
39
68
 
@@ -47,9 +76,13 @@ def max(&block)
47
76
  end
48
77
 
49
78
  def min(&block)
50
- val = self.first
51
- last = self.last
52
- return super if block
79
+ val = self.begin
80
+ last = self.end
81
+ if block
82
+ raise RangeError, "cannot get the minimum of endless range with custom comparison method" if last.nil?
83
+ return super
84
+ end
85
+ return val if last.nil?
53
86
 
54
87
  # fast path for numerics
55
88
  if val.kind_of?(Numeric) && last.kind_of?(Numeric)
@@ -34,16 +34,17 @@ r_lt(mrb_state *mrb, mrb_value a, mrb_value b)
34
34
  static mrb_value
35
35
  range_cover(mrb_state *mrb, mrb_value range)
36
36
  {
37
- mrb_value val;
38
37
  struct RRange *r = mrb_range_ptr(mrb, range);
38
+ mrb_value val = mrb_get_arg1(mrb);
39
39
  mrb_value beg, end;
40
40
 
41
- mrb_get_args(mrb, "o", &val);
42
-
43
41
  beg = RANGE_BEG(r);
44
42
  end = RANGE_END(r);
45
43
 
46
44
  if (r_le(mrb, beg, val)) {
45
+ if (mrb_nil_p(end)) {
46
+ return mrb_true_value();
47
+ }
47
48
  if (RANGE_EXCL(r)) {
48
49
  if (r_lt(mrb, val, end))
49
50
  return mrb_true_value();
@@ -57,36 +58,6 @@ range_cover(mrb_state *mrb, mrb_value range)
57
58
  return mrb_false_value();
58
59
  }
59
60
 
60
- /*
61
- * call-seq:
62
- * rng.last -> obj
63
- * rng.last(n) -> an_array
64
- *
65
- * Returns the last object in the range,
66
- * or an array of the last +n+ elements.
67
- *
68
- * Note that with no arguments +last+ will return the object that defines
69
- * the end of the range even if #exclude_end? is +true+.
70
- *
71
- * (10..20).last #=> 20
72
- * (10...20).last #=> 20
73
- * (10..20).last(3) #=> [18, 19, 20]
74
- * (10...20).last(3) #=> [17, 18, 19]
75
- */
76
- static mrb_value
77
- range_last(mrb_state *mrb, mrb_value range)
78
- {
79
- mrb_value num;
80
- mrb_value array;
81
-
82
- if (mrb_get_args(mrb, "|o", &num) == 0) {
83
- return mrb_range_end(mrb, range);
84
- }
85
-
86
- array = mrb_funcall(mrb, range, "to_a", 0);
87
- return mrb_funcall(mrb, array, "last", 1, mrb_to_int(mrb, num));
88
- }
89
-
90
61
  /*
91
62
  * call-seq:
92
63
  * rng.size -> num
@@ -98,7 +69,7 @@ range_last(mrb_state *mrb, mrb_value range)
98
69
  * ('a'..'z').size #=> nil
99
70
  */
100
71
 
101
- #ifndef MRB_WITHOUT_FLOAT
72
+ #ifndef MRB_NO_FLOAT
102
73
  static mrb_value
103
74
  range_size(mrb_state *mrb, mrb_value range)
104
75
  {
@@ -110,9 +81,13 @@ range_size(mrb_state *mrb, mrb_value range)
110
81
 
111
82
  beg = RANGE_BEG(r);
112
83
  end = RANGE_END(r);
84
+ if ((mrb_fixnum_p(beg) || mrb_float_p(beg)) && mrb_nil_p(end)) {
85
+ return mrb_float_value(mrb, INFINITY);
86
+ }
87
+
113
88
  excl = RANGE_EXCL(r);
114
- if (mrb_fixnum_p(beg)) {
115
- beg_f = (mrb_float)mrb_fixnum(beg);
89
+ if (mrb_integer_p(beg)) {
90
+ beg_f = (mrb_float)mrb_integer(beg);
116
91
  }
117
92
  else if (mrb_float_p(beg)) {
118
93
  beg_f = mrb_float(beg);
@@ -120,8 +95,8 @@ range_size(mrb_state *mrb, mrb_value range)
120
95
  else {
121
96
  num_p = FALSE;
122
97
  }
123
- if (mrb_fixnum_p(end)) {
124
- end_f = (mrb_float)mrb_fixnum(end);
98
+ if (mrb_integer_p(end)) {
99
+ end_f = (mrb_float)mrb_integer(end);
125
100
  }
126
101
  else if (mrb_float_p(end)) {
127
102
  end_f = mrb_float(end);
@@ -161,18 +136,22 @@ range_size(mrb_state *mrb, mrb_value range)
161
136
 
162
137
  beg = RANGE_BEG(r);
163
138
  end = RANGE_END(r);
139
+ if (mrb_fixnum_p(beg) && mrb_nil_p(end)) {
140
+ return mrb_nil_value();
141
+ }
142
+
164
143
  excl = RANGE_EXCL(r) ? 0 : 1;
165
144
 
166
- if (mrb_fixnum_p(beg) && mrb_fixnum_p(end)) {
167
- mrb_int a = mrb_fixnum(beg);
168
- mrb_int b = mrb_fixnum(end);
145
+ if (mrb_integer_p(beg) && mrb_integer_p(end)) {
146
+ mrb_int a = mrb_integer(beg);
147
+ mrb_int b = mrb_integer(end);
169
148
  mrb_int c = b - a + excl;
170
149
 
171
150
  return mrb_fixnum_value(c);
172
151
  }
173
152
  return mrb_nil_value();
174
153
  }
175
- #endif /* MRB_WITHOUT_FLOAT */
154
+ #endif /* MRB_NO_FLOAT */
176
155
 
177
156
  void
178
157
  mrb_mruby_range_ext_gem_init(mrb_state* mrb)
@@ -180,7 +159,6 @@ mrb_mruby_range_ext_gem_init(mrb_state* mrb)
180
159
  struct RClass * s = mrb_class_get(mrb, "Range");
181
160
 
182
161
  mrb_define_method(mrb, s, "cover?", range_cover, MRB_ARGS_REQ(1));
183
- mrb_define_method(mrb, s, "last", range_last, MRB_ARGS_OPT(1));
184
162
  mrb_define_method(mrb, s, "size", range_size, MRB_ARGS_NONE());
185
163
  }
186
164
 
@@ -5,11 +5,17 @@
5
5
  assert_true ("a".."z").cover?("c")
6
6
  assert_true !("a".."z").cover?("5")
7
7
  assert_true ("a".."z").cover?("cc")
8
+ assert_true ("a"..).cover?("c")
9
+ assert_false ("a"..).cover?("5")
10
+ assert_true ("a"..).cover?("cc")
8
11
  end
9
12
 
10
13
  assert('Range#first') do
11
14
  assert_equal 10, (10..20).first
12
15
  assert_equal [10, 11, 12], (10..20).first(3)
16
+ assert_equal 10, (10..).first
17
+ assert_equal [10, 11, 12], (10..).first(3)
18
+ assert_raise(RangeError) { (..1).first }
13
19
 
14
20
  skip unless Object.const_defined?(:Float)
15
21
  assert_equal [0, 1, 2], (0..Float::INFINITY).first(3)
@@ -18,6 +24,8 @@
18
24
  assert('Range#last') do
19
25
  assert_equal 20, (10..20).last
20
26
  assert_equal 20, (10...20).last
27
+ assert_raise(RangeError) { (10..).last }
28
+ assert_raise(RangeError) { (10...).last }
21
29
  assert_equal [18, 19, 20], (10..20).last(3)
22
30
  assert_equal [17, 18, 19], (10...20).last(3)
23
31
  end
@@ -26,6 +34,9 @@
26
34
  assert_equal 42, (1..42).size
27
35
  assert_equal 41, (1...42).size
28
36
  assert_nil ('a'..'z').size
37
+ assert_nil ('a'..).size
38
+
39
+ assert_nil (1..).size unless Object.const_defined?(:Float)
29
40
 
30
41
  skip unless Object.const_defined?(:Float)
31
42
  assert_equal 6, (1...6.3).size
@@ -33,6 +44,10 @@
33
44
  assert_equal 5, (1.1...6).size
34
45
  assert_equal 15, (1.0..15.9).size
35
46
  assert_equal Float::INFINITY, (0..Float::INFINITY).size
47
+
48
+ assert_equal Float::INFINITY, (1..).size
49
+ assert_equal Float::INFINITY, (1...).size
50
+ assert_equal Float::INFINITY, (1.0..).size
36
51
  end
37
52
 
38
53
  assert('Range#max') do
@@ -50,6 +65,10 @@
50
65
  # returns the endpoint when the endpoint equals the start point and the range is inclusive
51
66
  assert_equal 5, (5..5).max
52
67
 
68
+ # raises RangeError when called on an endless range
69
+ assert_raise(RangeError) { (10..).max }
70
+ assert_raise(RangeError) { (10...).max }
71
+
53
72
  skip unless Object.const_defined?(:Float)
54
73
 
55
74
  # returns the maximum value in the Float range when called with no arguments
@@ -94,26 +113,31 @@
94
113
  # returns the minimum value in the range when called with no arguments
95
114
  assert_equal 1, (1..10).min
96
115
  assert_equal 1, (1...10).min
116
+ assert_equal 1, (1..).min
97
117
 
98
118
  # returns nil when the start point is greater than the endpoint
99
119
  assert_equal nil, (100..10).min
100
120
 
101
121
  # returns nil when the endpoint equals the start point and the range is exclusive
102
- assert_equal nil, (5...5).max
122
+ assert_equal nil, (5...5).min
103
123
 
104
124
  # returns the endpoint when the endpoint equals the start point and the range is inclusive
105
- assert_equal 5, (5..5).max
125
+ assert_equal 5, (5..5).min
106
126
 
107
127
  skip unless Object.const_defined?(:Float)
108
128
 
109
129
  # returns the minimum value in the Float range when called with no arguments
110
130
  assert_equal 303.20, (303.20..908.1111).min
131
+ assert_equal 1, (1.0..).min
111
132
 
112
133
  # returns nil when the start point is greater than the endpoint in a Float range
113
- assert_equal nil, (3003.20..908.1111).max
134
+ assert_equal nil, (3003.20..908.1111).min
114
135
  end
115
136
 
116
137
  assert('Range#min given a block') do
138
+ # raise when called with a block in endless range
139
+ assert_raise(RangeError) { (1..).min{} }
140
+
117
141
  # passes each pair of values in the range to the block
118
142
  acc = []
119
143
  (1..10).min do |a, b|
@@ -47,12 +47,14 @@ def /(rhs)
47
47
  end
48
48
  end
49
49
 
50
+ alias quo /
51
+
50
52
  def <=>(rhs)
51
- if rhs.is_a?(Integral)
53
+ case rhs
54
+ when Integer, Float
52
55
  return numerator <=> rhs if denominator == 1
53
56
  rhs = Rational(rhs)
54
57
  end
55
-
56
58
  case rhs
57
59
  when Rational
58
60
  (numerator * rhs.denominator - denominator * rhs.numerator) <=> 0
@@ -65,14 +67,13 @@ def <=>(rhs)
65
67
 
66
68
  def ==(rhs)
67
69
  return true if self.equal?(rhs)
68
- if rhs.is_a?(Integral) && denominator == 1
69
- return numerator == rhs
70
- end
71
- if rhs.is_a?(Rational)
72
- numerator * rhs.denominator == denominator * rhs.numerator
73
- else
74
- rhs == self
70
+ case rhs
71
+ when Integer, Float
72
+ return numerator == rhs if denominator == 1
73
+ when Rational
74
+ return numerator * rhs.denominator == denominator * rhs.numerator
75
75
  end
76
+ rhs == self
76
77
  end
77
78
  end
78
79
 
@@ -83,16 +84,9 @@ def to_r
83
84
  end
84
85
 
85
86
  module Kernel
86
- def Rational(numerator, denominator = 1)
87
- a = numerator
88
- b = denominator
89
- a, b = b, a % b until b == 0
90
- Rational._new(numerator.div(a), denominator.div(a))
91
- end
92
-
93
87
  [:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|
94
- Fixnum.instance_eval do
95
- original_operator_name = "__original_operator_#{op}_rational"
88
+ original_operator_name = :"__original_operator_#{op}_rational"
89
+ Integer.instance_eval do
96
90
  alias_method original_operator_name, op
97
91
  define_method op do |rhs|
98
92
  if rhs.is_a? Rational
@@ -103,7 +97,6 @@ def Rational(numerator, denominator = 1)
103
97
  end
104
98
  end
105
99
  Float.instance_eval do
106
- original_operator_name = "__original_operator_#{op}_rational"
107
100
  alias_method original_operator_name, op
108
101
  define_method op do |rhs|
109
102
  if rhs.is_a? Rational
@@ -114,4 +107,3 @@ def Rational(numerator, denominator = 1)
114
107
  end if Object.const_defined?(:Float)
115
108
  end
116
109
  end
117
-
@@ -2,6 +2,7 @@
2
2
  #include <mruby/class.h>
3
3
  #include <mruby/string.h>
4
4
  #include <mruby/numeric.h>
5
+ #include <mruby/presym.h>
5
6
 
6
7
  struct mrb_rational {
7
8
  mrb_int numerator;
@@ -60,88 +61,243 @@ static mrb_value
60
61
  rational_numerator(mrb_state *mrb, mrb_value self)
61
62
  {
62
63
  struct mrb_rational *p = rational_ptr(mrb, self);
63
- return mrb_fixnum_value(p->numerator);
64
+ return mrb_int_value(mrb, p->numerator);
64
65
  }
65
66
 
66
67
  static mrb_value
67
68
  rational_denominator(mrb_state *mrb, mrb_value self)
68
69
  {
69
70
  struct mrb_rational *p = rational_ptr(mrb, self);
70
- return mrb_fixnum_value(p->denominator);
71
+ return mrb_int_value(mrb, p->denominator);
72
+ }
73
+
74
+ static void
75
+ rat_overflow(mrb_state *mrb)
76
+ {
77
+ mrb_raise(mrb, E_RANGE_ERROR, "integer overflow in rational");
78
+ }
79
+
80
+ static void
81
+ rat_zerodiv(mrb_state *mrb)
82
+ {
83
+ mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0 in rational");
71
84
  }
72
85
 
73
86
  static mrb_value
74
87
  rational_new(mrb_state *mrb, mrb_int numerator, mrb_int denominator)
75
88
  {
76
- struct RClass *c = mrb_class_get(mrb, "Rational");
89
+ struct RClass *c = mrb_class_get_id(mrb, MRB_SYM(Rational));
77
90
  struct mrb_rational *p;
78
- struct RBasic *rat = rational_alloc(mrb, c, &p);
91
+ struct RBasic *rat;
92
+
93
+ if (denominator == 0) {
94
+ rat_zerodiv(mrb);
95
+ }
96
+ if (denominator < 0) {
97
+ if (numerator == MRB_INT_MIN || denominator == MRB_INT_MIN) {
98
+ rat_overflow(mrb);
99
+ }
100
+ numerator *= -1;
101
+ denominator *= -1;
102
+ }
103
+ rat = rational_alloc(mrb, c, &p);
79
104
  p->numerator = numerator;
80
105
  p->denominator = denominator;
81
106
  MRB_SET_FROZEN_FLAG(rat);
82
107
  return mrb_obj_value(rat);
83
108
  }
84
109
 
110
+ inline static mrb_int
111
+ i_gcd(mrb_int x, mrb_int y)
112
+ {
113
+ mrb_uint u, v, t;
114
+ int shift;
115
+
116
+ if (x < 0)
117
+ x = -x;
118
+ if (y < 0)
119
+ y = -y;
120
+
121
+ if (x == 0)
122
+ return y;
123
+ if (y == 0)
124
+ return x;
125
+
126
+ u = (mrb_uint)x;
127
+ v = (mrb_uint)y;
128
+ for (shift = 0; ((u | v) & 1) == 0; ++shift) {
129
+ u >>= 1;
130
+ v >>= 1;
131
+ }
132
+
133
+ while ((u & 1) == 0)
134
+ u >>= 1;
135
+
136
+ do {
137
+ while ((v & 1) == 0)
138
+ v >>= 1;
139
+
140
+ if (u > v) {
141
+ t = v;
142
+ v = u;
143
+ u = t;
144
+ }
145
+ v = v - u;
146
+ } while (v != 0);
147
+
148
+ return (mrb_int)(u << shift);
149
+ }
150
+
151
+ static mrb_value
152
+ rational_new_i(mrb_state *mrb, mrb_int n, mrb_int d)
153
+ {
154
+ mrb_int a;
155
+
156
+ if (d == 0) {
157
+ rat_zerodiv(mrb);
158
+ }
159
+ a = i_gcd(n, d);
160
+ if ((n == MRB_INT_MIN || d == MRB_INT_MIN) && a == -1) {
161
+ rat_overflow(mrb);
162
+ }
163
+ return rational_new(mrb, n/a, d/a);
164
+ }
165
+
166
+ #ifndef MRB_NO_FLOAT
167
+ #include <math.h>
168
+
169
+ #if defined(MRB_INT32) || defined(MRB_USE_FLOAT32)
170
+ #define frexp_rat(x,exp) frexpf((float)x, exp)
171
+ #define ldexp_rat(x,exp) ldexpf((float)x, exp)
172
+ #define RAT_MANT_DIG FLT_MANT_DIG
173
+ #define RAT_INT_LIMIT 30
174
+ #define RAT_HUGE_VAL HUGE_VALF
175
+ #else
176
+ #define frexp_rat frexp
177
+ #define ldexp_rat ldexp
178
+ #define RAT_MANT_DIG DBL_MANT_DIG
179
+ #define RAT_INT_LIMIT 62
180
+ #define RAT_HUGE_VAL HUGE_VAL
181
+ #endif
182
+
183
+ static void
184
+ float_decode_internal(mrb_state *mrb, mrb_float f, mrb_float *rf, int *n)
185
+ {
186
+ f = (mrb_float)frexp_rat(f, n);
187
+ if (isinf(f)) rat_overflow(mrb);
188
+ f = (mrb_float)ldexp_rat(f, RAT_MANT_DIG);
189
+ *n -= RAT_MANT_DIG;
190
+ *rf = f;
191
+ }
192
+
193
+ void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
194
+
195
+ static mrb_value
196
+ rational_new_f(mrb_state *mrb, mrb_float f0)
197
+ {
198
+ mrb_float f;
199
+ int n;
200
+
201
+ mrb_check_num_exact(mrb, f0);
202
+ float_decode_internal(mrb, f0, &f, &n);
203
+ #if FLT_RADIX == 2
204
+ if (n == 0)
205
+ return rational_new(mrb, (mrb_int)f, 1);
206
+ if (n > 0) {
207
+ f = ldexp_rat(f, n);
208
+ if (f == RAT_HUGE_VAL || f > (mrb_float)MRB_INT_MAX) {
209
+ rat_overflow(mrb);
210
+ }
211
+ return rational_new(mrb, (mrb_uint)f, 1);
212
+ }
213
+ if (n < -RAT_INT_LIMIT) {
214
+ f = ldexp_rat(f, n+RAT_INT_LIMIT);
215
+ n = RAT_INT_LIMIT;
216
+ }
217
+ else {
218
+ n = -n;
219
+ }
220
+ return rational_new_i(mrb, (mrb_int)f, ((mrb_int)1)<<n);
221
+ #else
222
+ mrb_int pow = 1;
223
+ if (n < 0) {
224
+ n = -n;
225
+ while (n > RAT_INT_LIMIT) {
226
+ f /= 2;
227
+ n--;
228
+ }
229
+ while (n--) {
230
+ pow *= FLT_RADIX;
231
+ }
232
+ return rational_new_i(mrb, f, pow);
233
+ }
234
+ else {
235
+ while (n--) {
236
+ if (MRB_INT_MAX/FLT_RADIX < pow) {
237
+ rat_overflow(mrb);
238
+ }
239
+ pow *= FLT_RADIX;
240
+ }
241
+ return rational_new(mrb, (mrb_int)f*pow, 1);
242
+ }
243
+ #endif
244
+ }
245
+ #endif
246
+
85
247
  static mrb_value
86
248
  rational_s_new(mrb_state *mrb, mrb_value self)
87
249
  {
88
250
  mrb_int numerator, denominator;
89
251
 
90
- #ifdef MRB_WITHOUT_FLOAT
252
+ #ifdef MRB_NO_FLOAT
91
253
  mrb_get_args(mrb, "ii", &numerator, &denominator);
92
254
  #else
93
255
 
94
- #define DROP_PRECISION(cond, num, denom) \
95
- do { \
96
- while (cond) { \
97
- num /= 2; \
98
- denom /= 2; \
99
- } \
100
- } while (0)
101
-
102
- mrb_value numv, denomv;
256
+ mrb_value numv, denomv;
103
257
 
104
258
  mrb_get_args(mrb, "oo", &numv, &denomv);
105
- if (mrb_fixnum_p(numv)) {
106
- numerator = mrb_fixnum(numv);
259
+ if (mrb_integer_p(numv)) {
260
+ numerator = mrb_integer(numv);
107
261
 
108
- if (mrb_fixnum_p(denomv)) {
109
- denominator = mrb_fixnum(denomv);
262
+ if (mrb_integer_p(denomv)) {
263
+ denominator = mrb_integer(denomv);
110
264
  }
111
265
  else {
266
+ mrb_float numf = (mrb_float)numerator;
112
267
  mrb_float denomf = mrb_to_flo(mrb, denomv);
113
268
 
114
- DROP_PRECISION(denomf < MRB_INT_MIN || denomf > MRB_INT_MAX, numerator, denomf);
115
- denominator = denomf;
269
+ return rational_new_f(mrb, numf/denomf);
116
270
  }
117
271
  }
118
272
  else {
119
273
  mrb_float numf = mrb_to_flo(mrb, numv);
274
+ mrb_float denomf;
120
275
 
121
- if (mrb_fixnum_p(denomv)) {
122
- denominator = mrb_fixnum(denomv);
276
+ if (mrb_integer_p(denomv)) {
277
+ denomf = (mrb_float)mrb_integer(denomv);
123
278
  }
124
279
  else {
125
- mrb_float denomf = mrb_to_flo(mrb, denomv);
126
-
127
- DROP_PRECISION(denomf < MRB_INT_MIN || denomf > MRB_INT_MAX, numf, denomf);
128
- denominator = denomf;
280
+ denomf = mrb_to_flo(mrb, denomv);
129
281
  }
130
-
131
- DROP_PRECISION(numf < MRB_INT_MIN || numf > MRB_INT_MAX, numf, denominator);
132
- numerator = numf;
282
+ return rational_new_f(mrb, numf/denomf);
133
283
  }
134
284
  #endif
135
-
136
285
  return rational_new(mrb, numerator, denominator);
137
286
  }
138
287
 
139
- #ifndef MRB_WITHOUT_FLOAT
288
+ #ifndef MRB_NO_FLOAT
140
289
  static mrb_value
141
290
  rational_to_f(mrb_state *mrb, mrb_value self)
142
291
  {
143
292
  struct mrb_rational *p = rational_ptr(mrb, self);
144
- mrb_float f = (mrb_float)p->numerator / (mrb_float)p->denominator;
293
+ mrb_float f;
294
+
295
+ if (p->denominator == 0.0) {
296
+ f = INFINITY;
297
+ }
298
+ else {
299
+ f = (mrb_float)p->numerator / (mrb_float)p->denominator;
300
+ }
145
301
 
146
302
  return mrb_float_value(mrb, f);
147
303
  }
@@ -152,9 +308,9 @@ rational_to_i(mrb_state *mrb, mrb_value self)
152
308
  {
153
309
  struct mrb_rational *p = rational_ptr(mrb, self);
154
310
  if (p->denominator == 0) {
155
- mrb_raise(mrb, mrb_exc_get(mrb, "StandardError"), "divided by 0");
311
+ rat_zerodiv(mrb);
156
312
  }
157
- return mrb_fixnum_value(p->numerator / p->denominator);
313
+ return mrb_int_value(mrb, p->numerator / p->denominator);
158
314
  }
159
315
 
160
316
  static mrb_value
@@ -176,14 +332,35 @@ rational_negative_p(mrb_state *mrb, mrb_value self)
176
332
  static mrb_value
177
333
  fix_to_r(mrb_state *mrb, mrb_value self)
178
334
  {
179
- return rational_new(mrb, mrb_fixnum(self), 1);
335
+ return rational_new(mrb, mrb_integer(self), 1);
336
+ }
337
+
338
+ static mrb_value
339
+ rational_m(mrb_state *mrb, mrb_value self)
340
+ {
341
+ #ifdef MRB_NO_FLOAT
342
+ mrb_int n, d = 1;
343
+ mrb_get_args(mrb, "i|i", &n, &d);
344
+ return rational_new_i(mrb, n, d);
345
+ #else
346
+ mrb_value a, b = mrb_fixnum_value(1);
347
+ mrb_get_args(mrb, "o|o", &a, &b);
348
+ if (mrb_integer_p(a) && mrb_integer_p(b)) {
349
+ return rational_new_i(mrb, mrb_integer(a), mrb_integer(b));
350
+ }
351
+ else {
352
+ mrb_float x = mrb_to_flo(mrb, a);
353
+ mrb_float y = mrb_to_flo(mrb, b);
354
+ return rational_new_f(mrb, x/y);
355
+ }
356
+ #endif
180
357
  }
181
358
 
182
359
  void mrb_mruby_rational_gem_init(mrb_state *mrb)
183
360
  {
184
361
  struct RClass *rat;
185
362
 
186
- rat = mrb_define_class(mrb, "Rational", mrb_class_get(mrb, "Numeric"));
363
+ rat = mrb_define_class_id(mrb, MRB_SYM(Rational), mrb_class_get_id(mrb, MRB_SYM(Numeric)));
187
364
  #ifdef RATIONAL_USE_ISTRUCT
188
365
  MRB_SET_INSTANCE_TT(rat, MRB_TT_ISTRUCT);
189
366
  mrb_assert(sizeof(struct mrb_rational) < ISTRUCT_DATA_SIZE);
@@ -194,13 +371,14 @@ void mrb_mruby_rational_gem_init(mrb_state *mrb)
194
371
  mrb_define_class_method(mrb, rat, "_new", rational_s_new, MRB_ARGS_REQ(2));
195
372
  mrb_define_method(mrb, rat, "numerator", rational_numerator, MRB_ARGS_NONE());
196
373
  mrb_define_method(mrb, rat, "denominator", rational_denominator, MRB_ARGS_NONE());
197
- #ifndef MRB_WITHOUT_FLOAT
374
+ #ifndef MRB_NO_FLOAT
198
375
  mrb_define_method(mrb, rat, "to_f", rational_to_f, MRB_ARGS_NONE());
199
376
  #endif
200
377
  mrb_define_method(mrb, rat, "to_i", rational_to_i, MRB_ARGS_NONE());
201
378
  mrb_define_method(mrb, rat, "to_r", rational_to_r, MRB_ARGS_NONE());
202
379
  mrb_define_method(mrb, rat, "negative?", rational_negative_p, MRB_ARGS_NONE());
203
- mrb_define_method(mrb, mrb->fixnum_class, "to_r", fix_to_r, MRB_ARGS_NONE());
380
+ mrb_define_method(mrb, mrb->integer_class, "to_r", fix_to_r, MRB_ARGS_NONE());
381
+ mrb_define_method(mrb, mrb->kernel_module, "Rational", rational_m, MRB_ARGS_ARG(1,1));
204
382
  }
205
383
 
206
384
  void