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
@@ -9,6 +9,7 @@
9
9
  #include <mruby/range.h>
10
10
  #include <mruby/string.h>
11
11
  #include <mruby/array.h>
12
+ #include <mruby/presym.h>
12
13
 
13
14
  #define RANGE_INITIALIZED_MASK 1
14
15
  #define RANGE_INITIALIZED(p) ((p)->flags |= RANGE_INITIALIZED_MASK)
@@ -23,15 +24,17 @@ r_check(mrb_state *mrb, mrb_value a, mrb_value b)
23
24
 
24
25
  ta = mrb_type(a);
25
26
  tb = mrb_type(b);
26
- #ifdef MRB_WITHOUT_FLOAT
27
- if (ta == MRB_TT_FIXNUM && tb == MRB_TT_FIXNUM ) {
27
+ #ifdef MRB_NO_FLOAT
28
+ if (ta == MRB_TT_INTEGER && tb == MRB_TT_INTEGER ) {
28
29
  #else
29
- if ((ta == MRB_TT_FIXNUM || ta == MRB_TT_FLOAT) &&
30
- (tb == MRB_TT_FIXNUM || tb == MRB_TT_FLOAT)) {
30
+ if ((ta == MRB_TT_INTEGER || ta == MRB_TT_FLOAT) &&
31
+ (tb == MRB_TT_INTEGER || tb == MRB_TT_FLOAT)) {
31
32
  #endif
32
33
  return;
33
34
  }
34
35
 
36
+ if (mrb_nil_p(a) || mrb_nil_p(b)) return;
37
+
35
38
  n = mrb_cmp(mrb, a, b);
36
39
  if (n == -2) { /* can not be compared */
37
40
  mrb_raise(mrb, E_ARGUMENT_ERROR, "bad value for range");
@@ -78,7 +81,7 @@ range_ptr_init(mrb_state *mrb, struct RRange *r, mrb_value beg, mrb_value end, m
78
81
  if (r) {
79
82
  if (RANGE_INITIALIZED_P(r)) {
80
83
  /* Ranges are immutable, so that they should be initialized only once. */
81
- mrb_name_error(mrb, mrb_intern_lit(mrb, "initialize"), "'initialize' called twice");
84
+ mrb_name_error(mrb, MRB_SYM(initialize), "'initialize' called twice");
82
85
  }
83
86
  else {
84
87
  range_ptr_alloc_edges(mrb, r);
@@ -161,6 +164,7 @@ range_initialize(mrb_state *mrb, mrb_value range)
161
164
 
162
165
  mrb_get_args(mrb, "oo|b", &beg, &end, &exclusive);
163
166
  range_ptr_replace(mrb, mrb_range_raw_ptr(range), beg, end, exclusive);
167
+ mrb_obj_freeze(mrb, range);
164
168
  return range;
165
169
  }
166
170
 
@@ -182,11 +186,9 @@ range_eq(mrb_state *mrb, mrb_value range)
182
186
  {
183
187
  struct RRange *rr;
184
188
  struct RRange *ro;
185
- mrb_value obj;
189
+ mrb_value obj = mrb_get_arg1(mrb);
186
190
  mrb_bool v1, v2;
187
191
 
188
- mrb_get_args(mrb, "o", &obj);
189
-
190
192
  if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value();
191
193
  if (!mrb_obj_is_instance_of(mrb, obj, mrb_obj_class(mrb, range))) { /* same class? */
192
194
  return mrb_false_value();
@@ -211,20 +213,28 @@ range_eq(mrb_state *mrb, mrb_value range)
211
213
  static mrb_value
212
214
  range_include(mrb_state *mrb, mrb_value range)
213
215
  {
214
- mrb_value val;
216
+ mrb_value val = mrb_get_arg1(mrb);
215
217
  struct RRange *r = mrb_range_ptr(mrb, range);
216
218
  mrb_value beg, end;
217
- mrb_bool include_p;
218
-
219
- mrb_get_args(mrb, "o", &val);
220
219
 
221
220
  beg = RANGE_BEG(r);
222
221
  end = RANGE_END(r);
223
- include_p = r_le(mrb, beg, val) && /* beg <= val */
224
- (RANGE_EXCL(r) ? r_gt(mrb, end, val) /* end > val */
225
- : r_ge(mrb, end, val)); /* end >= val */
226
-
227
- return mrb_bool_value(include_p);
222
+ if (mrb_nil_p(beg)) {
223
+ if (RANGE_EXCL(r) ? r_gt(mrb, end, val) /* end > val */
224
+ : r_ge(mrb, end, val)) { /* end >= val */
225
+ return mrb_true_value();
226
+ }
227
+ }
228
+ else if (r_le(mrb, beg, val)) { /* beg <= val */
229
+ if (mrb_nil_p(end)) {
230
+ return mrb_true_value();
231
+ }
232
+ if (RANGE_EXCL(r) ? r_gt(mrb, end, val) /* end > val */
233
+ : r_ge(mrb, end, val)) { /* end >= val */
234
+ return mrb_true_value();
235
+ }
236
+ }
237
+ return mrb_false_value();
228
238
  }
229
239
 
230
240
  /* 15.2.14.4.12(x) */
@@ -261,14 +271,21 @@ range_to_s(mrb_state *mrb, mrb_value range)
261
271
  static mrb_value
262
272
  range_inspect(mrb_state *mrb, mrb_value range)
263
273
  {
264
- mrb_value str, str2;
274
+ mrb_value str;
265
275
  struct RRange *r = mrb_range_ptr(mrb, range);
266
276
 
267
- str = mrb_inspect(mrb, RANGE_BEG(r));
268
- str2 = mrb_inspect(mrb, RANGE_END(r));
269
- str = mrb_str_dup(mrb, str);
270
- mrb_str_cat(mrb, str, "...", RANGE_EXCL(r) ? 3 : 2);
271
- mrb_str_cat_str(mrb, str, str2);
277
+ if (!mrb_nil_p(RANGE_BEG(r))) {
278
+ str = mrb_inspect(mrb, RANGE_BEG(r));
279
+ str = mrb_str_dup(mrb, str);
280
+ mrb_str_cat(mrb, str, "...", RANGE_EXCL(r) ? 3 : 2);
281
+ }
282
+ else {
283
+ str = mrb_str_new(mrb, "...", RANGE_EXCL(r) ? 3 : 2);
284
+ }
285
+ if (!mrb_nil_p(RANGE_END(r))) {
286
+ mrb_value str2 = mrb_inspect(mrb, RANGE_END(r));
287
+ mrb_str_cat_str(mrb, str, str2);
288
+ }
272
289
 
273
290
  return str;
274
291
  }
@@ -289,11 +306,9 @@ range_inspect(mrb_state *mrb, mrb_value range)
289
306
  static mrb_value
290
307
  range_eql(mrb_state *mrb, mrb_value range)
291
308
  {
292
- mrb_value obj;
309
+ mrb_value obj = mrb_get_arg1(mrb);
293
310
  struct RRange *r, *o;
294
311
 
295
- mrb_get_args(mrb, "o", &obj);
296
-
297
312
  if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value();
298
313
  if (!mrb_obj_is_kind_of(mrb, obj, mrb->range_class)) return mrb_false_value();
299
314
  if (!mrb_range_p(obj)) return mrb_false_value();
@@ -312,11 +327,9 @@ range_eql(mrb_state *mrb, mrb_value range)
312
327
  static mrb_value
313
328
  range_initialize_copy(mrb_state *mrb, mrb_value copy)
314
329
  {
315
- mrb_value src;
330
+ mrb_value src = mrb_get_arg1(mrb);
316
331
  struct RRange *r;
317
332
 
318
- mrb_get_args(mrb, "o", &src);
319
-
320
333
  if (mrb_obj_equal(mrb, copy, src)) return copy;
321
334
  if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) {
322
335
  mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
@@ -324,6 +337,7 @@ range_initialize_copy(mrb_state *mrb, mrb_value copy)
324
337
 
325
338
  r = mrb_range_ptr(mrb, src);
326
339
  range_ptr_replace(mrb, mrb_range_raw_ptr(copy), RANGE_BEG(r), RANGE_END(r), RANGE_EXCL(r));
340
+ mrb_obj_freeze(mrb, copy);
327
341
 
328
342
  return copy;
329
343
  }
@@ -336,8 +350,8 @@ mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, con
336
350
  result = mrb_ary_new(mrb);
337
351
 
338
352
  for (i = 0; i < argc; ++i) {
339
- if (mrb_fixnum_p(argv[i])) {
340
- mrb_ary_push(mrb, result, func(mrb, obj, mrb_fixnum(argv[i])));
353
+ if (mrb_integer_p(argv[i])) {
354
+ mrb_ary_push(mrb, result, func(mrb, obj, mrb_integer(argv[i])));
341
355
  }
342
356
  else if (mrb_range_beg_len(mrb, argv[i], &beg, &len, olen, FALSE) == MRB_RANGE_OK) {
343
357
  mrb_int const end = olen < beg + len ? olen : beg + len;
@@ -389,13 +403,15 @@ MRB_API enum mrb_range_beg_len
389
403
  mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len, mrb_bool trunc)
390
404
  {
391
405
  mrb_int beg, end;
406
+ mrb_bool excl;
392
407
  struct RRange *r;
393
408
 
394
409
  if (!mrb_range_p(range)) return MRB_RANGE_TYPE_MISMATCH;
395
410
  r = mrb_range_ptr(mrb, range);
396
411
 
397
412
  beg = mrb_int(mrb, RANGE_BEG(r));
398
- end = mrb_int(mrb, RANGE_END(r));
413
+ end = mrb_nil_p(RANGE_END(r)) ? -1 : mrb_int(mrb, RANGE_END(r));
414
+ excl = mrb_nil_p(RANGE_END(r)) ? 0 : RANGE_EXCL(r);
399
415
 
400
416
  if (beg < 0) {
401
417
  beg += len;
@@ -408,7 +424,7 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp,
408
424
  }
409
425
 
410
426
  if (end < 0) end += len;
411
- if (!RANGE_EXCL(r) && (!trunc || end < len)) end++; /* include end point */
427
+ if (!excl && (!trunc || end < len)) end++; /* include end point */
412
428
  len = end - beg;
413
429
  if (len < 0) len = 0;
414
430
 
@@ -19,11 +19,25 @@ void mrb_init_mrbgems(mrb_state*);
19
19
  void mrb_gc_init(mrb_state*, mrb_gc *gc);
20
20
  void mrb_gc_destroy(mrb_state*, mrb_gc *gc);
21
21
 
22
+ int mrb_core_init_protect(mrb_state *mrb, void (*body)(mrb_state *, void *), void *opaque);
23
+
24
+ static void
25
+ init_gc_and_core(mrb_state *mrb, void *opaque)
26
+ {
27
+ static const struct mrb_context mrb_context_zero = { 0 };
28
+
29
+ mrb_gc_init(mrb, &mrb->gc);
30
+ mrb->c = (struct mrb_context*)mrb_malloc(mrb, sizeof(struct mrb_context));
31
+ *mrb->c = mrb_context_zero;
32
+ mrb->root_c = mrb->c;
33
+
34
+ mrb_init_core(mrb);
35
+ }
36
+
22
37
  MRB_API mrb_state*
23
38
  mrb_open_core(mrb_allocf f, void *ud)
24
39
  {
25
40
  static const mrb_state mrb_state_zero = { 0 };
26
- static const struct mrb_context mrb_context_zero = { 0 };
27
41
  mrb_state *mrb;
28
42
 
29
43
  if (f == NULL) f = mrb_default_allocf;
@@ -35,12 +49,10 @@ mrb_open_core(mrb_allocf f, void *ud)
35
49
  mrb->allocf = f;
36
50
  mrb->atexit_stack_len = 0;
37
51
 
38
- mrb_gc_init(mrb, &mrb->gc);
39
- mrb->c = (struct mrb_context*)mrb_malloc(mrb, sizeof(struct mrb_context));
40
- *mrb->c = mrb_context_zero;
41
- mrb->root_c = mrb->c;
42
-
43
- mrb_init_core(mrb);
52
+ if (mrb_core_init_protect(mrb, init_gc_and_core, NULL)) {
53
+ mrb_close(mrb);
54
+ return NULL;
55
+ }
44
56
 
45
57
  return mrb;
46
58
  }
@@ -65,6 +77,14 @@ mrb_open(void)
65
77
  return mrb;
66
78
  }
67
79
 
80
+ #ifndef MRB_NO_GEMS
81
+ static void
82
+ init_mrbgems(mrb_state *mrb, void *opaque)
83
+ {
84
+ mrb_init_mrbgems(mrb);
85
+ }
86
+ #endif
87
+
68
88
  MRB_API mrb_state*
69
89
  mrb_open_allocf(mrb_allocf f, void *ud)
70
90
  {
@@ -74,8 +94,11 @@ mrb_open_allocf(mrb_allocf f, void *ud)
74
94
  return NULL;
75
95
  }
76
96
 
77
- #ifndef DISABLE_GEMS
78
- mrb_init_mrbgems(mrb);
97
+ #ifndef MRB_NO_GEMS
98
+ if (mrb_core_init_protect(mrb, init_mrbgems, NULL)) {
99
+ mrb_close(mrb);
100
+ return NULL;
101
+ }
79
102
  mrb_gc_arena_restore(mrb, 0);
80
103
  #endif
81
104
  return mrb;
@@ -86,12 +109,14 @@ void mrb_free_symtbl(mrb_state *mrb);
86
109
  void
87
110
  mrb_irep_incref(mrb_state *mrb, mrb_irep *irep)
88
111
  {
112
+ if (irep->flags & MRB_IREP_NO_FREE) return;
89
113
  irep->refcnt++;
90
114
  }
91
115
 
92
116
  void
93
117
  mrb_irep_decref(mrb_state *mrb, mrb_irep *irep)
94
118
  {
119
+ if (irep->flags & MRB_IREP_NO_FREE) return;
95
120
  irep->refcnt--;
96
121
  if (irep->refcnt == 0) {
97
122
  mrb_irep_free(mrb, irep);
@@ -101,12 +126,14 @@ mrb_irep_decref(mrb_state *mrb, mrb_irep *irep)
101
126
  void
102
127
  mrb_irep_cutref(mrb_state *mrb, mrb_irep *irep)
103
128
  {
104
- mrb_irep *tmp;
129
+ mrb_irep **reps;
105
130
  int i;
106
131
 
132
+ if (irep->flags & MRB_IREP_NO_FREE) return;
133
+ reps = (mrb_irep**)irep->reps;
107
134
  for (i=0; i<irep->rlen; i++) {
108
- tmp = irep->reps[i];
109
- irep->reps[i] = NULL;
135
+ mrb_irep *tmp = reps[i];
136
+ reps[i] = NULL;
110
137
  if (tmp) mrb_irep_decref(mrb, tmp);
111
138
  }
112
139
  }
@@ -116,57 +143,46 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep)
116
143
  {
117
144
  int i;
118
145
 
146
+ if (irep->flags & MRB_IREP_NO_FREE) return;
119
147
  if (!(irep->flags & MRB_ISEQ_NO_FREE))
120
148
  mrb_free(mrb, (void*)irep->iseq);
121
- if (irep->pool) for (i=0; i<irep->plen; i++) {
122
- if (mrb_string_p(irep->pool[i])) {
123
- mrb_gc_free_str(mrb, RSTRING(irep->pool[i]));
124
- mrb_free(mrb, mrb_obj_ptr(irep->pool[i]));
125
- }
126
- #if defined(MRB_WORD_BOXING) && !defined(MRB_WITHOUT_FLOAT)
127
- else if (mrb_float_p(irep->pool[i])) {
128
- mrb_free(mrb, mrb_obj_ptr(irep->pool[i]));
149
+ if (irep->pool) {
150
+ for (i=0; i<irep->plen; i++) {
151
+ if ((irep->pool[i].tt & 3) == IREP_TT_STR) {
152
+ mrb_free(mrb, (void*)irep->pool[i].u.str);
153
+ }
129
154
  }
130
- #endif
155
+ mrb_free(mrb, (void*)irep->pool);
131
156
  }
132
- mrb_free(mrb, irep->pool);
133
- mrb_free(mrb, irep->syms);
134
- for (i=0; i<irep->rlen; i++) {
135
- if (irep->reps[i])
136
- mrb_irep_decref(mrb, irep->reps[i]);
157
+ mrb_free(mrb, (void*)irep->syms);
158
+ if (irep->reps) {
159
+ for (i=0; i<irep->rlen; i++) {
160
+ if (irep->reps[i])
161
+ mrb_irep_decref(mrb, (mrb_irep*)irep->reps[i]);
162
+ }
163
+ mrb_free(mrb, (void*)irep->reps);
137
164
  }
138
- mrb_free(mrb, irep->reps);
139
- mrb_free(mrb, irep->lv);
165
+ mrb_free(mrb, (void*)irep->lv);
140
166
  mrb_debug_info_free(mrb, irep->debug_info);
141
167
  mrb_free(mrb, irep);
142
168
  }
143
169
 
144
- void mrb_free_backtrace(mrb_state *mrb);
145
-
146
170
  MRB_API void
147
171
  mrb_free_context(mrb_state *mrb, struct mrb_context *c)
148
172
  {
149
173
  if (!c) return;
150
174
  mrb_free(mrb, c->stbase);
151
175
  mrb_free(mrb, c->cibase);
152
- mrb_free(mrb, c->rescue);
153
- mrb_free(mrb, c->ensure);
154
176
  mrb_free(mrb, c);
155
177
  }
156
178
 
157
- MRB_API void
179
+ int mrb_protect_atexit(mrb_state *mrb);
180
+
181
+ MRB_API void
158
182
  mrb_close(mrb_state *mrb)
159
183
  {
160
184
  if (!mrb) return;
161
- if (mrb->atexit_stack_len > 0) {
162
- mrb_int i;
163
- for (i = mrb->atexit_stack_len; i > 0; --i) {
164
- mrb->atexit_stack[i - 1](mrb);
165
- }
166
- #ifndef MRB_FIXED_STATE_ATEXIT_STACK
167
- mrb_free(mrb, mrb->atexit_stack);
168
- #endif
169
- }
185
+ mrb_protect_atexit(mrb);
170
186
 
171
187
  /* free */
172
188
  mrb_gc_destroy(mrb, &mrb->gc);
@@ -8,8 +8,9 @@
8
8
  # define _CRT_NONSTDC_NO_DEPRECATE
9
9
  #endif
10
10
 
11
- #ifndef MRB_WITHOUT_FLOAT
11
+ #ifndef MRB_NO_FLOAT
12
12
  #include <float.h>
13
+ #include <math.h>
13
14
  #endif
14
15
  #include <limits.h>
15
16
  #include <stddef.h>
@@ -21,6 +22,7 @@
21
22
  #include <mruby/range.h>
22
23
  #include <mruby/string.h>
23
24
  #include <mruby/numeric.h>
25
+ #include <mruby/presym.h>
24
26
 
25
27
  typedef struct mrb_shared_string {
26
28
  int refcnt;
@@ -174,19 +176,6 @@ mrb_str_new_capa(mrb_state *mrb, size_t capa)
174
176
  return mrb_obj_value(s);
175
177
  }
176
178
 
177
- #ifndef MRB_STR_BUF_MIN_SIZE
178
- # define MRB_STR_BUF_MIN_SIZE 128
179
- #endif
180
-
181
- MRB_API mrb_value
182
- mrb_str_buf_new(mrb_state *mrb, size_t capa)
183
- {
184
- if (capa < MRB_STR_BUF_MIN_SIZE) {
185
- capa = MRB_STR_BUF_MIN_SIZE;
186
- }
187
- return mrb_str_new_capa(mrb, capa);
188
- }
189
-
190
179
  static void
191
180
  resize_capa(mrb_state *mrb, struct RString *s, size_t capacity)
192
181
  {
@@ -296,12 +285,14 @@ static const char utf8len_codepage[256] =
296
285
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
297
286
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
298
287
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
299
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
288
+ 1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
300
289
  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,
301
290
  };
302
291
 
303
- static mrb_int
304
- utf8len(const char* p, const char* e)
292
+ #define utf8_islead(c) ((unsigned char)((c)&0xc0) != 0x80)
293
+
294
+ mrb_int
295
+ mrb_utf8len(const char* p, const char* e)
305
296
  {
306
297
  mrb_int len;
307
298
  mrb_int i;
@@ -311,23 +302,23 @@ utf8len(const char* p, const char* e)
311
302
  if (len == 1) return 1;
312
303
  if (len > e - p) return 1;
313
304
  for (i = 1; i < len; ++i)
314
- if ((p[i] & 0xc0) != 0x80)
305
+ if (utf8_islead(p[i]))
315
306
  return 1;
316
307
  return len;
317
308
  }
318
309
 
319
310
  mrb_int
320
- mrb_utf8_len(const char *str, mrb_int byte_len)
311
+ mrb_utf8_strlen(const char *str, mrb_int byte_len)
321
312
  {
322
- mrb_int total = 0;
313
+ mrb_int len = 0;
323
314
  const char *p = str;
324
315
  const char *e = p + byte_len;
325
316
 
326
317
  while (p < e) {
327
- p += utf8len(p, e);
328
- total++;
318
+ p += mrb_utf8len(p, e);
319
+ len++;
329
320
  }
330
- return total;
321
+ return len;
331
322
  }
332
323
 
333
324
  static mrb_int
@@ -340,7 +331,7 @@ utf8_strlen(mrb_value str)
340
331
  return byte_len;
341
332
  }
342
333
  else {
343
- mrb_int utf8_len = mrb_utf8_len(RSTR_PTR(s), byte_len);
334
+ mrb_int utf8_len = mrb_utf8_strlen(RSTR_PTR(s), byte_len);
344
335
  if (byte_len == utf8_len) RSTR_SET_ASCII_FLAG(s);
345
336
  return utf8_len;
346
337
  }
@@ -361,7 +352,7 @@ chars2bytes(mrb_value s, mrb_int off, mrb_int idx)
361
352
  const char *e = RSTRING_END(s);
362
353
 
363
354
  for (b=i=0; p<e && i<idx; i++) {
364
- n = utf8len(p, e);
355
+ n = mrb_utf8len(p, e);
365
356
  b += n;
366
357
  p += n;
367
358
  }
@@ -378,7 +369,7 @@ bytes2chars(char *p, mrb_int len, mrb_int bi)
378
369
  mrb_int i;
379
370
 
380
371
  for (i = 0; p < pivot; i ++) {
381
- p += utf8len(p, e);
372
+ p += mrb_utf8len(p, e);
382
373
  }
383
374
  if (p != pivot) return -1;
384
375
  return i;
@@ -399,7 +390,7 @@ char_adjust(const char *beg, const char *end, const char *ptr)
399
390
  while (p > beg) {
400
391
  p --;
401
392
  if ((*p & 0xc0) != 0x80) {
402
- int clen = utf8len(p, end);
393
+ int clen = mrb_utf8len(p, end);
403
394
  if (clen > ptr - p) return p;
404
395
  break;
405
396
  }
@@ -462,10 +453,10 @@ str_index_str_by_char_search(mrb_state *mrb, const char *p, const char *pend, co
462
453
  }
463
454
 
464
455
  pivot = p + qstable[(unsigned char)p[slen - 1]];
465
- if (pivot > pend || pivot < p /* overflowed */) { return -1; }
456
+ if (pivot >= pend || pivot < p /* overflowed */) { return -1; }
466
457
 
467
458
  do {
468
- p += utf8len(p, pend);
459
+ p += mrb_utf8len(p, pend);
469
460
  off ++;
470
461
  } while (p < pivot);
471
462
  }
@@ -484,7 +475,7 @@ str_index_str_by_char(mrb_state *mrb, mrb_value str, mrb_value sub, mrb_int pos)
484
475
 
485
476
  for (; pos > 0; pos --) {
486
477
  if (pend - p < 1) { return -1; }
487
- p += utf8len(p, pend);
478
+ p += mrb_utf8len(p, pend);
488
479
  }
489
480
 
490
481
  if (slen < 1) { return off; }
@@ -503,25 +494,45 @@ str_index_str_by_char(mrb_state *mrb, mrb_value str, mrb_value sub, mrb_int pos)
503
494
  #define str_index_str_by_char(mrb, str, sub, pos) str_index_str(mrb, str, sub, pos)
504
495
  #endif
505
496
 
497
+ #ifndef MRB_QS_SHORT_STRING_LENGTH
498
+ #define MRB_QS_SHORT_STRING_LENGTH 2048
499
+ #endif
500
+
506
501
  static inline mrb_int
507
502
  mrb_memsearch_qs(const unsigned char *xs, mrb_int m, const unsigned char *ys, mrb_int n)
508
503
  {
509
- const unsigned char *x = xs, *xe = xs + m;
510
- const unsigned char *y = ys;
511
- int i;
512
- ptrdiff_t qstable[256];
504
+ if (n + m < MRB_QS_SHORT_STRING_LENGTH) {
505
+ const unsigned char *y = ys;
506
+ const unsigned char *ye = ys+n-m+1;
513
507
 
514
- /* Preprocessing */
515
- for (i = 0; i < 256; ++i)
516
- qstable[i] = m + 1;
517
- for (; x < xe; ++x)
518
- qstable[*x] = xe - x;
519
- /* Searching */
520
- for (; y + m <= ys + n; y += *(qstable + y[m])) {
521
- if (*xs == *y && memcmp(xs, y, m) == 0)
522
- return (mrb_int)(y - ys);
508
+ for (;;) {
509
+ y = (const unsigned char*)memchr(y, xs[0], (size_t)(ye-y));
510
+ if (y == NULL) return -1;
511
+ if (memcmp(xs, y, m) == 0) {
512
+ return (mrb_int)(y - ys);
513
+ }
514
+ y++;
515
+ }
516
+ return -1;
517
+ }
518
+ else {
519
+ const unsigned char *x = xs, *xe = xs + m;
520
+ const unsigned char *y = ys;
521
+ int i;
522
+ ptrdiff_t qstable[256];
523
+
524
+ /* Preprocessing */
525
+ for (i = 0; i < 256; ++i)
526
+ qstable[i] = m + 1;
527
+ for (; x < xe; ++x)
528
+ qstable[*x] = xe - x;
529
+ /* Searching */
530
+ for (; y + m <= ys + n; y += *(qstable + y[m])) {
531
+ if (*xs == *y && memcmp(xs, y, m) == 0)
532
+ return (mrb_int)(y - ys);
533
+ }
534
+ return -1;
523
535
  }
524
- return -1;
525
536
  }
526
537
 
527
538
  static mrb_int
@@ -562,9 +573,6 @@ str_share(mrb_state *mrb, struct RString *orig, struct RString *s)
562
573
  else if (RSTR_FSHARED_P(orig)) {
563
574
  str_init_fshared(orig, s, orig->as.heap.aux.fshared);
564
575
  }
565
- else if (mrb_frozen_p(orig) && !RSTR_POOL_P(orig)) {
566
- str_init_fshared(orig, s, orig);
567
- }
568
576
  else {
569
577
  if (orig->as.heap.aux.capa > orig->as.heap.len) {
570
578
  orig->as.heap.ptr = (char *)mrb_realloc(mrb, orig->as.heap.ptr, len+1);
@@ -575,29 +583,6 @@ str_share(mrb_state *mrb, struct RString *orig, struct RString *s)
575
583
  }
576
584
  }
577
585
 
578
- mrb_value
579
- mrb_str_pool(mrb_state *mrb, const char *p, mrb_int len, mrb_bool nofree)
580
- {
581
- struct RString *s = (struct RString *)mrb_malloc(mrb, sizeof(struct RString));
582
-
583
- s->tt = MRB_TT_STRING;
584
- s->c = mrb->string_class;
585
- s->flags = 0;
586
-
587
- if (RSTR_EMBEDDABLE_P(len)) {
588
- str_init_embed(s, p, len);
589
- }
590
- else if (nofree) {
591
- str_init_nofree(s, p, len);
592
- }
593
- else {
594
- str_init_normal(mrb, s, p, len);
595
- }
596
- RSTR_SET_POOL_FLAG(s);
597
- MRB_SET_FROZEN_FLAG(s);
598
- return mrb_obj_value(s);
599
- }
600
-
601
586
  mrb_value
602
587
  mrb_str_byte_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len)
603
588
  {
@@ -877,7 +862,7 @@ mrb_str_to_cstr(mrb_state *mrb, mrb_value str0)
877
862
  MRB_API void
878
863
  mrb_str_concat(mrb_state *mrb, mrb_value self, mrb_value other)
879
864
  {
880
- other = mrb_str_to_str(mrb, other);
865
+ other = mrb_obj_as_string(mrb, other);
881
866
  mrb_str_cat_str(mrb, self, other);
882
867
  }
883
868
 
@@ -1040,10 +1025,9 @@ mrb_str_cmp(mrb_state *mrb, mrb_value str1, mrb_value str2)
1040
1025
  static mrb_value
1041
1026
  mrb_str_cmp_m(mrb_state *mrb, mrb_value str1)
1042
1027
  {
1043
- mrb_value str2;
1028
+ mrb_value str2 = mrb_get_arg1(mrb);
1044
1029
  mrb_int result;
1045
1030
 
1046
- mrb_get_args(mrb, "o", &str2);
1047
1031
  if (!mrb_string_p(str2)) {
1048
1032
  return mrb_nil_value();
1049
1033
  }
@@ -1085,37 +1069,17 @@ mrb_str_equal(mrb_state *mrb, mrb_value str1, mrb_value str2)
1085
1069
  static mrb_value
1086
1070
  mrb_str_equal_m(mrb_state *mrb, mrb_value str1)
1087
1071
  {
1088
- mrb_value str2;
1089
-
1090
- mrb_get_args(mrb, "o", &str2);
1072
+ mrb_value str2 = mrb_get_arg1(mrb);
1091
1073
 
1092
1074
  return mrb_bool_value(mrb_str_equal(mrb, str1, str2));
1093
1075
  }
1094
1076
  /* ---------------------------------- */
1095
1077
 
1096
- MRB_API mrb_value
1097
- mrb_str_to_str(mrb_state *mrb, mrb_value str)
1098
- {
1099
- switch (mrb_type(str)) {
1100
- case MRB_TT_STRING:
1101
- return str;
1102
- case MRB_TT_SYMBOL:
1103
- return mrb_sym_str(mrb, mrb_symbol(str));
1104
- case MRB_TT_FIXNUM:
1105
- return mrb_fixnum_to_str(mrb, str, 10);
1106
- case MRB_TT_CLASS:
1107
- case MRB_TT_MODULE:
1108
- return mrb_mod_to_s(mrb, str);
1109
- default:
1110
- return mrb_convert_type(mrb, str, MRB_TT_STRING, "String", "to_s");
1111
- }
1112
- }
1113
-
1114
1078
  /* obslete: use RSTRING_PTR() */
1115
1079
  MRB_API const char*
1116
1080
  mrb_string_value_ptr(mrb_state *mrb, mrb_value str)
1117
1081
  {
1118
- str = mrb_str_to_str(mrb, str);
1082
+ str = mrb_obj_as_string(mrb, str);
1119
1083
  return RSTRING_PTR(str);
1120
1084
  }
1121
1085
 
@@ -1161,8 +1125,8 @@ str_convert_range(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen,
1161
1125
  }
1162
1126
  else {
1163
1127
  switch (mrb_type(indx)) {
1164
- case MRB_TT_FIXNUM:
1165
- *beg = mrb_fixnum(indx);
1128
+ case MRB_TT_INTEGER:
1129
+ *beg = mrb_integer(indx);
1166
1130
  *len = 1;
1167
1131
  return STR_CHAR_RANGE;
1168
1132
 
@@ -1177,8 +1141,8 @@ str_convert_range(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen,
1177
1141
 
1178
1142
  default:
1179
1143
  indx = mrb_to_int(mrb, indx);
1180
- if (mrb_fixnum_p(indx)) {
1181
- *beg = mrb_fixnum(indx);
1144
+ if (mrb_integer_p(indx)) {
1145
+ *beg = mrb_integer(indx);
1182
1146
  *len = 1;
1183
1147
  return STR_CHAR_RANGE;
1184
1148
  }
@@ -1193,7 +1157,7 @@ range_arg:
1193
1157
  break;
1194
1158
  }
1195
1159
 
1196
- mrb_raise(mrb, E_TYPE_ERROR, "can't convert to Fixnum");
1160
+ mrb_raise(mrb, E_TYPE_ERROR, "can't convert to Integer");
1197
1161
  }
1198
1162
  }
1199
1163
  return STR_OUT_OF_RANGE;
@@ -1237,8 +1201,8 @@ mrb_str_aref(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen)
1237
1201
  * str.slice(range) => new_str or nil
1238
1202
  * str.slice(other_str) => new_str or nil
1239
1203
  *
1240
- * Element Reference---If passed a single <code>Fixnum</code>, returns the code
1241
- * of the character at that position. If passed two <code>Fixnum</code>
1204
+ * Element Reference---If passed a single <code>Integer</code>, returns the code
1205
+ * of the character at that position. If passed two <code>Integer</code>
1242
1206
  * objects, returns a substring starting at the offset given by the first, and
1243
1207
  * a length given by the second. If given a range, a substring containing
1244
1208
  * characters at offsets given by the range is returned. In all three cases, if
@@ -1296,7 +1260,7 @@ str_replace_partial(mrb_state *mrb, mrb_value src, mrb_int pos, mrb_int end, mrb
1296
1260
  }
1297
1261
 
1298
1262
  replen = (mrb_nil_p(rep) ? 0 : RSTRING_LEN(rep));
1299
- newlen = replen + len - (end - pos);
1263
+ newlen = replen + (len - (end - pos));
1300
1264
 
1301
1265
  if (newlen >= MRB_SSIZE_MAX || newlen < replen /* overflowed */) {
1302
1266
  mrb_raise(mrb, E_RUNTIME_ERROR, "string size too big");
@@ -1341,7 +1305,7 @@ str_escape(mrb_state *mrb, mrb_value str, mrb_bool inspect)
1341
1305
  unsigned char c, cc;
1342
1306
  #ifdef MRB_UTF8_STRING
1343
1307
  if (inspect) {
1344
- mrb_int clen = utf8len(p, pend);
1308
+ mrb_int clen = mrb_utf8len(p, pend);
1345
1309
  if (clen > 1) {
1346
1310
  mrb_int i;
1347
1311
 
@@ -1644,7 +1608,7 @@ mrb_str_chop_bang(mrb_state *mrb, mrb_value str)
1644
1608
  const char* t = RSTR_PTR(s), *p = t;
1645
1609
  const char* e = p + RSTR_LEN(s);
1646
1610
  while (p<e) {
1647
- mrb_int clen = utf8len(p, e);
1611
+ mrb_int clen = mrb_utf8len(p, e);
1648
1612
  if (p + clen>=e) break;
1649
1613
  p += clen;
1650
1614
  }
@@ -1770,10 +1734,9 @@ mrb_str_empty_p(mrb_state *mrb, mrb_value self)
1770
1734
  static mrb_value
1771
1735
  mrb_str_eql(mrb_state *mrb, mrb_value self)
1772
1736
  {
1773
- mrb_value str2;
1737
+ mrb_value str2 = mrb_get_arg1(mrb);
1774
1738
  mrb_bool eql_p;
1775
1739
 
1776
- mrb_get_args(mrb, "o", &str2);
1777
1740
  eql_p = (mrb_string_p(str2)) && str_eql(mrb, self, str2);
1778
1741
 
1779
1742
  return mrb_bool_value(eql_p);
@@ -1792,13 +1755,17 @@ mrb_str_hash(mrb_state *mrb, mrb_value str)
1792
1755
  struct RString *s = mrb_str_ptr(str);
1793
1756
  mrb_int len = RSTR_LEN(s);
1794
1757
  char *p = RSTR_PTR(s);
1795
- uint64_t key = 0;
1758
+ uint32_t hash = 0;
1796
1759
 
1797
- while (len--) {
1798
- key = key*65599 + *p;
1799
- p++;
1760
+ for(int i = 0; i < len; ++i) {
1761
+ hash += p[i];
1762
+ hash += (hash << 10);
1763
+ hash ^= (hash >> 6);
1800
1764
  }
1801
- return (uint32_t)(key + (key>>5));
1765
+ hash += (hash << 3);
1766
+ hash ^= (hash >> 11);
1767
+ hash += (hash << 15);
1768
+ return hash;
1802
1769
  }
1803
1770
 
1804
1771
  /* 15.2.10.5.20 */
@@ -1945,10 +1912,20 @@ mrb_str_intern(mrb_state *mrb, mrb_value self)
1945
1912
  MRB_API mrb_value
1946
1913
  mrb_obj_as_string(mrb_state *mrb, mrb_value obj)
1947
1914
  {
1948
- if (mrb_string_p(obj)) {
1915
+ switch (mrb_type(obj)) {
1916
+ case MRB_TT_STRING:
1949
1917
  return obj;
1918
+ case MRB_TT_SYMBOL:
1919
+ return mrb_sym_str(mrb, mrb_symbol(obj));
1920
+ case MRB_TT_INTEGER:
1921
+ return mrb_fixnum_to_str(mrb, obj, 10);
1922
+ case MRB_TT_SCLASS:
1923
+ case MRB_TT_CLASS:
1924
+ case MRB_TT_MODULE:
1925
+ return mrb_mod_to_s(mrb, obj);
1926
+ default:
1927
+ return mrb_type_convert(mrb, obj, MRB_TT_STRING, MRB_SYM(to_s));
1950
1928
  }
1951
- return mrb_str_to_str(mrb, obj);
1952
1929
  }
1953
1930
 
1954
1931
  MRB_API mrb_value
@@ -2016,7 +1993,7 @@ mrb_str_reverse_bang(mrb_state *mrb, mrb_value str)
2016
1993
  p = RSTR_PTR(s);
2017
1994
  e = p + RSTR_LEN(s);
2018
1995
  while (p<e) {
2019
- mrb_int clen = utf8len(p, e);
1996
+ mrb_int clen = mrb_utf8len(p, e);
2020
1997
  str_reverse(p, p + clen - 1);
2021
1998
  p += clen;
2022
1999
  }
@@ -2240,13 +2217,13 @@ mrb_str_split_m(mrb_state *mrb, mrb_value str)
2240
2217
  }
2241
2218
 
2242
2219
  mrb_value
2243
- mrb_str_len_to_inum(mrb_state *mrb, const char *str, mrb_int len, mrb_int base, int badcheck)
2220
+ mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, mrb_int base, int badcheck)
2244
2221
  {
2245
2222
  const char *p = str;
2246
2223
  const char *pend = str + len;
2247
2224
  char sign = 1;
2248
2225
  int c;
2249
- uint64_t n = 0;
2226
+ mrb_int n = 0;
2250
2227
  mrb_int val;
2251
2228
 
2252
2229
  #define conv_digit(c) \
@@ -2373,19 +2350,17 @@ mrb_str_len_to_inum(mrb_state *mrb, const char *str, mrb_int len, mrb_int base,
2373
2350
  if (c < 0 || c >= base) {
2374
2351
  break;
2375
2352
  }
2376
- n *= base;
2377
- n += c;
2378
- if (n > (uint64_t)MRB_INT_MAX + (sign ? 0 : 1)) {
2379
- #ifndef MRB_WITHOUT_FLOAT
2380
- if (base == 10) {
2381
- return mrb_float_value(mrb, mrb_str_to_dbl(mrb, mrb_str_new(mrb, str, len), badcheck));
2382
- }
2383
- else
2384
- #endif
2385
- {
2386
- mrb_raisef(mrb, E_RANGE_ERROR, "string (%l) too big for integer", str, pend-str);
2353
+ if (mrb_int_mul_overflow(n, base, &n)) goto overflow;
2354
+ if (MRB_INT_MAX - c < n) {
2355
+ if (sign == 0 && MRB_INT_MAX - n == c - 1) {
2356
+ n = MRB_INT_MIN;
2357
+ sign = 1;
2358
+ break;
2387
2359
  }
2360
+ overflow:
2361
+ mrb_raisef(mrb, E_RANGE_ERROR, "string (%l) too big for integer", str, pend-str);
2388
2362
  }
2363
+ n += c;
2389
2364
  }
2390
2365
  val = (mrb_int)n;
2391
2366
  if (badcheck) {
@@ -2395,7 +2370,7 @@ mrb_str_len_to_inum(mrb_state *mrb, const char *str, mrb_int len, mrb_int base,
2395
2370
  if (p<pend) goto bad; /* trailing garbage */
2396
2371
  }
2397
2372
 
2398
- return mrb_fixnum_value(sign ? val : -val);
2373
+ return mrb_int_value(mrb, sign ? val : -val);
2399
2374
  nullbyte:
2400
2375
  mrb_raise(mrb, E_ARGUMENT_ERROR, "string contains null byte");
2401
2376
  /* not reached */
@@ -2487,49 +2462,57 @@ mrb_str_to_i(mrb_state *mrb, mrb_value self)
2487
2462
  return mrb_str_to_inum(mrb, self, base, FALSE);
2488
2463
  }
2489
2464
 
2490
- #ifndef MRB_WITHOUT_FLOAT
2465
+ #ifndef MRB_NO_FLOAT
2491
2466
  double
2492
2467
  mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck)
2493
2468
  {
2494
- char buf[DBL_DIG * 4 + 10];
2495
- const char *p = s;
2469
+ char buf[DBL_DIG * 4 + 20];
2470
+ const char *p = s, *p2;
2496
2471
  const char *pend = p + len;
2497
2472
  char *end;
2498
2473
  char *n;
2499
2474
  char prev = 0;
2500
2475
  double d;
2476
+ mrb_bool dot = FALSE;
2501
2477
 
2502
2478
  if (!p) return 0.0;
2503
- while (ISSPACE(*p)) p++;
2479
+ while (p<pend && ISSPACE(*p)) p++;
2480
+ p2 = p;
2504
2481
 
2505
2482
  if (pend - p > 2 && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
2506
2483
  mrb_value x;
2507
2484
 
2508
2485
  if (!badcheck) return 0.0;
2509
2486
  x = mrb_str_len_to_inum(mrb, p, pend-p, 0, badcheck);
2510
- if (mrb_fixnum_p(x))
2511
- d = (double)mrb_fixnum(x);
2487
+ if (mrb_integer_p(x))
2488
+ d = (double)mrb_integer(x);
2512
2489
  else /* if (mrb_float_p(x)) */
2513
2490
  d = mrb_float(x);
2514
2491
  return d;
2515
2492
  }
2516
2493
  while (p < pend) {
2517
2494
  if (!*p) {
2518
- if (badcheck && p < pend) {
2495
+ if (badcheck) {
2519
2496
  mrb_raise(mrb, E_ARGUMENT_ERROR, "string for Float contains null byte");
2520
2497
  /* not reached */
2521
2498
  }
2522
2499
  pend = p;
2523
- p = s;
2500
+ p = p2;
2501
+ goto nocopy;
2502
+ }
2503
+ if (!badcheck && *p == ' ') {
2504
+ pend = p;
2505
+ p = p2;
2524
2506
  goto nocopy;
2525
2507
  }
2526
2508
  if (*p == '_') break;
2527
2509
  p++;
2528
2510
  }
2529
- p = s;
2511
+ p = p2;
2530
2512
  n = buf;
2531
2513
  while (p < pend) {
2532
2514
  char c = *p++;
2515
+ if (c == '.') dot = TRUE;
2533
2516
  if (c == '_') {
2534
2517
  /* remove an underscore between digits */
2535
2518
  if (n == buf || !ISDIGIT(prev) || p == pend) {
@@ -2539,6 +2522,11 @@ mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck)
2539
2522
  }
2540
2523
  else if (badcheck && prev == '_' && !ISDIGIT(c)) goto bad;
2541
2524
  else {
2525
+ const char *bend = buf+sizeof(buf)-1;
2526
+ if (n==bend) { /* buffer overflow */
2527
+ if (dot) break; /* cut off remaining fractions */
2528
+ return INFINITY;
2529
+ }
2542
2530
  *n++ = c;
2543
2531
  }
2544
2532
  prev = c;
@@ -2725,7 +2713,7 @@ mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr, size_t len)
2725
2713
  MRB_API mrb_value
2726
2714
  mrb_str_cat_cstr(mrb_state *mrb, mrb_value str, const char *ptr)
2727
2715
  {
2728
- return mrb_str_cat(mrb, str, ptr, strlen(ptr));
2716
+ return mrb_str_cat(mrb, str, ptr, ptr ? strlen(ptr) : 0);
2729
2717
  }
2730
2718
 
2731
2719
  MRB_API mrb_value
@@ -2855,25 +2843,32 @@ mrb_str_setbyte(mrb_state *mrb, mrb_value str)
2855
2843
  static mrb_value
2856
2844
  mrb_str_byteslice(mrb_state *mrb, mrb_value str)
2857
2845
  {
2858
- mrb_value a1, a2;
2846
+ mrb_value a1;
2859
2847
  mrb_int str_len = RSTRING_LEN(str), beg, len;
2860
2848
  mrb_bool empty = TRUE;
2861
2849
 
2862
- if (mrb_get_args(mrb, "o|o", &a1, &a2) == 2) {
2863
- beg = mrb_fixnum(mrb_to_int(mrb, a1));
2864
- len = mrb_fixnum(mrb_to_int(mrb, a2));
2865
- }
2866
- else if (mrb_range_p(a1)) {
2867
- if (mrb_range_beg_len(mrb, a1, &beg, &len, str_len, TRUE) != MRB_RANGE_OK) {
2868
- return mrb_nil_value();
2850
+ len = mrb_get_argc(mrb);
2851
+ switch (len) {
2852
+ case 2:
2853
+ mrb_get_args(mrb, "ii", &beg, &len);
2854
+ break;
2855
+ case 1:
2856
+ a1 = mrb_get_arg1(mrb);
2857
+ if (mrb_range_p(a1)) {
2858
+ if (mrb_range_beg_len(mrb, a1, &beg, &len, str_len, TRUE) != MRB_RANGE_OK) {
2859
+ return mrb_nil_value();
2860
+ }
2869
2861
  }
2862
+ else {
2863
+ beg = mrb_integer(mrb_to_int(mrb, a1));
2864
+ len = 1;
2865
+ empty = FALSE;
2866
+ }
2867
+ break;
2868
+ default:
2869
+ mrb_argnum_error(mrb, len, 1, 2);
2870
+ break;
2870
2871
  }
2871
- else {
2872
- beg = mrb_fixnum(mrb_to_int(mrb, a1));
2873
- len = 1;
2874
- empty = FALSE;
2875
- }
2876
-
2877
2872
  if (mrb_str_beg_len(str_len, &beg, &len) && (empty || len != 0)) {
2878
2873
  return mrb_str_byte_subseq(mrb, str, beg, len);
2879
2874
  }
@@ -2928,7 +2923,7 @@ mrb_init_string(mrb_state *mrb)
2928
2923
  mrb_define_method(mrb, s, "slice", mrb_str_aref_m, MRB_ARGS_ANY()); /* 15.2.10.5.34 */
2929
2924
  mrb_define_method(mrb, s, "split", mrb_str_split_m, MRB_ARGS_ANY()); /* 15.2.10.5.35 */
2930
2925
 
2931
- #ifndef MRB_WITHOUT_FLOAT
2926
+ #ifndef MRB_NO_FLOAT
2932
2927
  mrb_define_method(mrb, s, "to_f", mrb_str_to_f, MRB_ARGS_NONE()); /* 15.2.10.5.38 */
2933
2928
  #endif
2934
2929
  mrb_define_method(mrb, s, "to_i", mrb_str_to_i, MRB_ARGS_ANY()); /* 15.2.10.5.39 */
@@ -2945,7 +2940,7 @@ mrb_init_string(mrb_state *mrb)
2945
2940
  mrb_define_method(mrb, s, "byteslice", mrb_str_byteslice, MRB_ARGS_ARG(1,1));
2946
2941
  }
2947
2942
 
2948
- #ifndef MRB_WITHOUT_FLOAT
2943
+ #ifndef MRB_NO_FLOAT
2949
2944
  /*
2950
2945
  * Source code for the "strtod" library procedure.
2951
2946
  *
@@ -3007,7 +3002,7 @@ mrb_float_read(const char *string, char **endPtr)
3007
3002
  int c;
3008
3003
  int exp = 0; /* Exponent read from "EX" field. */
3009
3004
  int fracExp = 0; /* Exponent that derives from the fractional
3010
- * part. Under normal circumstatnces, it is
3005
+ * part. Under normal circumstances, it is
3011
3006
  * the negative of the number of digits in F.
3012
3007
  * However, if I is very long, the last digits
3013
3008
  * of I get dropped (otherwise a long I with a