script_core 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (529) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +35 -57
  3. data/.ruby-version +1 -1
  4. data/Gemfile +2 -2
  5. data/README.md +7 -1
  6. data/ext/enterprise_script_service/Rakefile +1 -1
  7. data/ext/enterprise_script_service/libseccomp/.travis.yml +24 -12
  8. data/ext/enterprise_script_service/libseccomp/CHANGELOG +32 -0
  9. data/ext/enterprise_script_service/libseccomp/CONTRIBUTING.md +37 -26
  10. data/ext/enterprise_script_service/libseccomp/CREDITS +11 -0
  11. data/ext/enterprise_script_service/libseccomp/README.md +21 -1
  12. data/ext/enterprise_script_service/libseccomp/configure.ac +13 -8
  13. data/ext/enterprise_script_service/libseccomp/doc/Makefile.am +6 -0
  14. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_api_get.3 +12 -2
  15. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_arch_add.3 +38 -6
  16. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_attr_set.3 +53 -2
  17. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_export_bpf.3 +20 -2
  18. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_init.3 +9 -2
  19. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_load.3 +32 -2
  20. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_merge.3 +16 -2
  21. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_alloc.3 +113 -0
  22. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_fd.3 +1 -0
  23. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_free.3 +1 -0
  24. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_id_valid.3 +1 -0
  25. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_receive.3 +1 -0
  26. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_respond.3 +1 -0
  27. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_rule_add.3 +64 -3
  28. data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_syscall_priority.3 +18 -3
  29. data/ext/enterprise_script_service/libseccomp/include/seccomp-syscalls.h +19 -0
  30. data/ext/enterprise_script_service/libseccomp/include/seccomp.h.in +116 -0
  31. data/ext/enterprise_script_service/libseccomp/src/.gitignore +2 -0
  32. data/ext/enterprise_script_service/libseccomp/src/Makefile.am +31 -17
  33. data/ext/enterprise_script_service/libseccomp/src/api.c +254 -58
  34. data/ext/enterprise_script_service/libseccomp/src/arch-aarch64.h +1 -9
  35. data/ext/enterprise_script_service/libseccomp/src/arch-arm.c +47 -2
  36. data/ext/enterprise_script_service/libseccomp/src/arch-arm.h +1 -9
  37. data/ext/enterprise_script_service/libseccomp/src/arch-gperf-generate +40 -0
  38. data/ext/enterprise_script_service/libseccomp/src/arch-mips.c +41 -4
  39. data/ext/enterprise_script_service/libseccomp/src/arch-mips.h +2 -10
  40. data/ext/enterprise_script_service/libseccomp/src/arch-mips64.c +41 -4
  41. data/ext/enterprise_script_service/libseccomp/src/arch-mips64.h +3 -11
  42. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.c +41 -4
  43. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.h +2 -10
  44. data/ext/enterprise_script_service/libseccomp/src/arch-parisc.h +1 -10
  45. data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.c +3 -3
  46. data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.h +29 -0
  47. data/ext/enterprise_script_service/libseccomp/src/arch-ppc.h +1 -9
  48. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.c +606 -8
  49. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.h +2 -10
  50. data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.c +31 -0
  51. data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.h +22 -0
  52. data/ext/enterprise_script_service/libseccomp/src/arch-s390.c +171 -12
  53. data/ext/enterprise_script_service/libseccomp/src/arch-s390.h +1 -17
  54. data/ext/enterprise_script_service/libseccomp/src/arch-s390x.c +166 -10
  55. data/ext/enterprise_script_service/libseccomp/src/arch-s390x.h +1 -20
  56. data/ext/enterprise_script_service/libseccomp/src/arch-syscall-dump.c +8 -1
  57. data/ext/enterprise_script_service/libseccomp/src/arch-syscall-validate +359 -143
  58. data/ext/enterprise_script_service/libseccomp/src/arch-x32.c +36 -2
  59. data/ext/enterprise_script_service/libseccomp/src/arch-x32.h +2 -10
  60. data/ext/enterprise_script_service/libseccomp/src/arch-x86.c +172 -10
  61. data/ext/enterprise_script_service/libseccomp/src/arch-x86.h +1 -14
  62. data/ext/enterprise_script_service/libseccomp/src/arch-x86_64.h +1 -9
  63. data/ext/enterprise_script_service/libseccomp/src/arch.c +11 -3
  64. data/ext/enterprise_script_service/libseccomp/src/arch.h +7 -0
  65. data/ext/enterprise_script_service/libseccomp/src/db.c +268 -57
  66. data/ext/enterprise_script_service/libseccomp/src/db.h +16 -2
  67. data/ext/enterprise_script_service/libseccomp/src/gen_bpf.c +503 -148
  68. data/ext/enterprise_script_service/libseccomp/src/gen_bpf.h +2 -1
  69. data/ext/enterprise_script_service/libseccomp/src/gen_pfc.c +165 -37
  70. data/ext/enterprise_script_service/libseccomp/src/python/libseccomp.pxd +37 -1
  71. data/ext/enterprise_script_service/libseccomp/src/python/seccomp.pyx +295 -5
  72. data/ext/enterprise_script_service/libseccomp/src/syscalls.c +56 -0
  73. data/ext/enterprise_script_service/libseccomp/src/syscalls.csv +470 -0
  74. data/ext/enterprise_script_service/libseccomp/src/syscalls.h +62 -0
  75. data/ext/enterprise_script_service/libseccomp/src/syscalls.perf.template +82 -0
  76. data/ext/enterprise_script_service/libseccomp/src/system.c +196 -16
  77. data/ext/enterprise_script_service/libseccomp/src/system.h +68 -13
  78. data/ext/enterprise_script_service/libseccomp/tests/.gitignore +10 -2
  79. data/ext/enterprise_script_service/libseccomp/tests/06-sim-actions.tests +1 -1
  80. data/ext/enterprise_script_service/libseccomp/tests/11-basic-basic_errors.c +5 -5
  81. data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.c +35 -1
  82. data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.py +10 -1
  83. data/ext/enterprise_script_service/libseccomp/tests/15-basic-resolver.c +4 -3
  84. data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.c +12 -0
  85. data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.py +1 -0
  86. data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.c → 18-sim-basic_allowlist.c} +0 -0
  87. data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.py → 18-sim-basic_allowlist.py} +0 -0
  88. data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_allowlist.tests +32 -0
  89. data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.c +3 -0
  90. data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.py +1 -0
  91. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.c +3 -0
  92. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.py +1 -0
  93. data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.tests +33 -17
  94. data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.c → 34-sim-basic_denylist.c} +0 -0
  95. data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.py → 34-sim-basic_denylist.py} +0 -0
  96. data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_denylist.tests +32 -0
  97. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.c +3 -0
  98. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.py +1 -0
  99. data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.tests +25 -25
  100. data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.c +24 -3
  101. data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.py +16 -1
  102. data/ext/enterprise_script_service/libseccomp/tests/47-live-kill_process.c +3 -3
  103. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.c +112 -0
  104. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.py +60 -0
  105. data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.tests +11 -0
  106. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.c +48 -0
  107. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.py +38 -0
  108. data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.tests +11 -0
  109. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.c +156 -0
  110. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.py +95 -0
  111. data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.tests +65 -0
  112. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.c +128 -0
  113. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.py +95 -0
  114. data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.tests +11 -0
  115. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.c +134 -0
  116. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.sh +46 -0
  117. data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.tests +11 -0
  118. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.c +90 -0
  119. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.py +65 -0
  120. data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.tests +11 -0
  121. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.c +64 -0
  122. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.py +46 -0
  123. data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.tests +11 -0
  124. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.c +116 -0
  125. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.py +61 -0
  126. data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.tests +11 -0
  127. data/ext/enterprise_script_service/libseccomp/tests/Makefile.am +34 -10
  128. data/ext/enterprise_script_service/libseccomp/tests/regression +10 -3
  129. data/ext/enterprise_script_service/libseccomp/tests/util.c +3 -3
  130. data/ext/enterprise_script_service/libseccomp/tools/Makefile.am +0 -3
  131. data/ext/enterprise_script_service/libseccomp/tools/check-syntax +1 -1
  132. data/ext/enterprise_script_service/libseccomp/tools/scmp_arch_detect.c +3 -0
  133. data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_disasm.c +4 -2
  134. data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_sim.c +4 -0
  135. data/ext/enterprise_script_service/libseccomp/tools/util.c +14 -12
  136. data/ext/enterprise_script_service/libseccomp/tools/util.h +7 -0
  137. data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +149 -0
  138. data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +55 -0
  139. data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
  140. data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
  141. data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
  142. data/ext/enterprise_script_service/mruby/.gitignore +3 -0
  143. data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
  144. data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
  145. data/ext/enterprise_script_service/mruby/.travis.yml +7 -10
  146. data/ext/enterprise_script_service/mruby/.yamllint +8 -0
  147. data/ext/enterprise_script_service/mruby/AUTHORS +4 -0
  148. data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
  149. data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
  150. data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
  151. data/ext/enterprise_script_service/mruby/LICENSE +1 -1
  152. data/ext/enterprise_script_service/mruby/Makefile +1 -1
  153. data/ext/enterprise_script_service/mruby/README.md +5 -11
  154. data/ext/enterprise_script_service/mruby/Rakefile +18 -108
  155. data/ext/enterprise_script_service/mruby/TODO.md +17 -0
  156. data/ext/enterprise_script_service/mruby/appveyor.yml +29 -26
  157. data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
  158. data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
  159. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +4 -21
  160. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +4 -4
  161. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +3 -20
  162. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +4 -21
  163. data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
  164. data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
  165. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_android_armeabi_v7a_neon_hard.rb → build_config/android_armeabi_v7a_neon_hard.rb} +0 -15
  166. data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
  167. data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
  168. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +4 -21
  169. data/ext/enterprise_script_service/mruby/{appveyor_config.rb → build_config/ci/gcc-clang.rb} +11 -8
  170. data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
  171. data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
  172. data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
  173. data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
  174. data/ext/enterprise_script_service/mruby/build_config/dreamcast_shelf.rb +94 -0
  175. data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
  176. data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
  177. data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
  178. data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
  179. data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
  180. data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
  181. data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
  182. data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
  183. data/ext/enterprise_script_service/mruby/doc/guides/compile.md +142 -49
  184. data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
  185. data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
  186. data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +53 -30
  187. data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
  188. data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
  189. data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
  190. data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
  191. data/ext/enterprise_script_service/mruby/doc/opcode.md +102 -103
  192. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
  193. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
  194. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
  195. data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
  196. data/ext/enterprise_script_service/mruby/include/mrbconf.h +88 -66
  197. data/ext/enterprise_script_service/mruby/include/mruby.h +160 -104
  198. data/ext/enterprise_script_service/mruby/include/mruby/array.h +27 -6
  199. data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +80 -46
  200. data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
  201. data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +76 -55
  202. data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
  203. data/ext/enterprise_script_service/mruby/include/mruby/common.h +14 -1
  204. data/ext/enterprise_script_service/mruby/include/mruby/compile.h +20 -6
  205. data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
  206. data/ext/enterprise_script_service/mruby/include/mruby/dump.h +18 -52
  207. data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
  208. data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
  209. data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
  210. data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
  211. data/ext/enterprise_script_service/mruby/include/mruby/irep.h +74 -14
  212. data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -1
  213. data/ext/enterprise_script_service/mruby/include/mruby/khash.h +19 -9
  214. data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +37 -63
  215. data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
  216. data/ext/enterprise_script_service/mruby/include/mruby/ops.h +29 -24
  217. data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
  218. data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
  219. data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
  220. data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
  221. data/ext/enterprise_script_service/mruby/include/mruby/proc.h +93 -21
  222. data/ext/enterprise_script_service/mruby/include/mruby/string.h +12 -16
  223. data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
  224. data/ext/enterprise_script_service/mruby/include/mruby/value.h +60 -59
  225. data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
  226. data/ext/enterprise_script_service/mruby/include/mruby/version.h +25 -6
  227. data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -72
  228. data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +71 -78
  229. data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
  230. data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
  231. data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +84 -32
  232. data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
  233. data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
  234. data/ext/enterprise_script_service/mruby/lib/mruby/source.rb +3 -1
  235. data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
  236. data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
  237. data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -81
  238. data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
  239. data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
  240. data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
  241. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -32
  242. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +10 -12
  243. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/test/array.rb +0 -13
  244. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +30 -18
  245. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
  246. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
  247. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
  248. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
  249. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
  250. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -4
  251. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
  252. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +6 -2
  253. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
  254. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
  255. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +46 -35
  256. data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
  257. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
  258. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +41 -28
  259. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
  260. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -2
  261. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +26 -6
  262. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
  263. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +6 -2
  264. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
  265. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
  266. data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +7 -1
  267. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +495 -436
  268. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
  269. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
  270. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +637 -220
  271. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +13734 -0
  272. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +20 -23
  273. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +2 -2
  274. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +9 -9
  275. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
  276. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
  277. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
  278. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -2
  279. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/src/exception.c +3 -3
  280. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +19 -238
  281. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/test/eval.rb +21 -0
  282. data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +19 -15
  283. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +31 -5
  284. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
  285. data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +5 -6
  286. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
  287. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +39 -7
  288. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrbgem.rake +2 -8
  289. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
  290. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +0 -16
  291. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +9 -14
  292. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +107 -59
  293. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +22 -38
  294. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +417 -203
  295. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +20 -12
  296. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +33 -2
  297. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +58 -50
  298. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +13 -14
  299. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
  300. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
  301. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +56 -73
  302. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +13 -4
  303. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
  304. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +80 -78
  305. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
  306. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
  307. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +8 -16
  308. data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -13
  309. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
  310. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
  311. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
  312. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
  313. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +120 -67
  314. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
  315. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +65 -26
  316. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +34 -21
  317. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
  318. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
  319. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
  320. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
  321. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +21 -43
  322. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
  323. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +12 -20
  324. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
  325. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
  326. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
  327. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +5 -5
  328. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
  329. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/mrbgem.rake +1 -1
  330. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
  331. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/test/sockettest.c +3 -2
  332. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +161 -93
  333. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +9 -25
  334. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
  335. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +17 -14
  336. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
  337. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +23 -36
  338. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +7 -6
  339. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
  340. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
  341. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
  342. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +17 -44
  343. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
  344. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +37 -41
  345. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
  346. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
  347. data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
  348. data/ext/enterprise_script_service/mruby/mrblib/00class.rb +10 -0
  349. data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
  350. data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
  351. data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
  352. data/ext/enterprise_script_service/mruby/mrblib/hash.rb +3 -23
  353. data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
  354. data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
  355. data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
  356. data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
  357. data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
  358. data/ext/enterprise_script_service/mruby/src/array.c +67 -90
  359. data/ext/enterprise_script_service/mruby/src/backtrace.c +18 -19
  360. data/ext/enterprise_script_service/mruby/src/class.c +819 -211
  361. data/ext/enterprise_script_service/mruby/src/codedump.c +226 -197
  362. data/ext/enterprise_script_service/mruby/src/debug.c +14 -11
  363. data/ext/enterprise_script_service/mruby/src/dump.c +470 -207
  364. data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
  365. data/ext/enterprise_script_service/mruby/src/error.c +94 -20
  366. data/ext/enterprise_script_service/mruby/src/etc.c +56 -39
  367. data/ext/enterprise_script_service/mruby/src/fmt_fp.c +103 -27
  368. data/ext/enterprise_script_service/mruby/src/gc.c +86 -349
  369. data/ext/enterprise_script_service/mruby/src/hash.c +1058 -723
  370. data/ext/enterprise_script_service/mruby/src/kernel.c +78 -226
  371. data/ext/enterprise_script_service/mruby/src/load.c +215 -159
  372. data/ext/enterprise_script_service/mruby/src/numeric.c +400 -382
  373. data/ext/enterprise_script_service/mruby/src/object.c +115 -90
  374. data/ext/enterprise_script_service/mruby/src/print.c +31 -6
  375. data/ext/enterprise_script_service/mruby/src/proc.c +56 -45
  376. data/ext/enterprise_script_service/mruby/src/range.c +49 -33
  377. data/ext/enterprise_script_service/mruby/src/state.c +58 -42
  378. data/ext/enterprise_script_service/mruby/src/string.c +151 -156
  379. data/ext/enterprise_script_service/mruby/src/symbol.c +132 -66
  380. data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
  381. data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
  382. data/ext/enterprise_script_service/mruby/src/vm.c +655 -645
  383. data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
  384. data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
  385. data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
  386. data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
  387. data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +64 -61
  388. data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
  389. data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
  390. data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
  391. data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
  392. data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
  393. data/ext/enterprise_script_service/mruby/tasks/toolchains/android.rake +46 -1
  394. data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +8 -7
  395. data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +13 -17
  396. data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +21 -25
  397. data/ext/enterprise_script_service/mruby/test/assert.rb +5 -4
  398. data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
  399. data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
  400. data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
  401. data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
  402. data/ext/enterprise_script_service/mruby/test/t/ensure.rb +8 -26
  403. data/ext/enterprise_script_service/mruby/test/t/exception.rb +2 -2
  404. data/ext/enterprise_script_service/mruby/test/t/float.rb +18 -8
  405. data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
  406. data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
  407. data/ext/enterprise_script_service/mruby/test/t/kernel.rb +16 -25
  408. data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
  409. data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
  410. data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
  411. data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
  412. data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
  413. data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
  414. data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
  415. data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
  416. data/ext/enterprise_script_service/mruby_config.rb +2 -5
  417. data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
  418. data/ext/enterprise_script_service/msgpack/.github/depends/boost.sh +56 -0
  419. data/ext/enterprise_script_service/msgpack/.github/workflows/coverage.yml +62 -0
  420. data/ext/enterprise_script_service/msgpack/.github/workflows/gha.yml +304 -0
  421. data/ext/enterprise_script_service/msgpack/CHANGELOG.md +11 -0
  422. data/ext/enterprise_script_service/msgpack/CMakeLists.txt +82 -39
  423. data/ext/enterprise_script_service/msgpack/Files.cmake +22 -12
  424. data/ext/enterprise_script_service/msgpack/QUICKSTART-C.md +26 -29
  425. data/ext/enterprise_script_service/msgpack/README.md +3 -2
  426. data/ext/enterprise_script_service/msgpack/appveyor.yml +6 -2
  427. data/ext/enterprise_script_service/msgpack/ci/build_cmake.sh +3 -1
  428. data/ext/enterprise_script_service/msgpack/cmake/CodeCoverage.cmake +55 -0
  429. data/ext/enterprise_script_service/msgpack/codecov.yml +36 -0
  430. data/ext/enterprise_script_service/msgpack/example/CMakeLists.txt +9 -5
  431. data/ext/enterprise_script_service/msgpack/example/boost/CMakeLists.txt +1 -1
  432. data/ext/enterprise_script_service/msgpack/example/c/CMakeLists.txt +17 -6
  433. data/ext/enterprise_script_service/msgpack/example/c/boundary.c +296 -0
  434. data/ext/enterprise_script_service/msgpack/example/c/jsonconv.c +419 -0
  435. data/ext/enterprise_script_service/msgpack/example/c/simple_c.c +1 -1
  436. data/ext/enterprise_script_service/msgpack/example/cpp03/CMakeLists.txt +3 -3
  437. data/ext/enterprise_script_service/msgpack/example/cpp11/CMakeLists.txt +2 -2
  438. data/ext/enterprise_script_service/msgpack/example/x3/CMakeLists.txt +2 -2
  439. data/ext/enterprise_script_service/msgpack/include/msgpack/pack.h +24 -1
  440. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/array_ref.hpp +5 -4
  441. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/boost/optional.hpp +4 -4
  442. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp17/vector_byte.hpp +8 -8
  443. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/map.hpp +4 -4
  444. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector.hpp +4 -4
  445. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_char.hpp +8 -8
  446. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_unsigned_char.hpp +8 -8
  447. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/wstring.hpp +4 -4
  448. data/ext/enterprise_script_service/msgpack/include/msgpack/v3/unpack.hpp +6 -6
  449. data/ext/enterprise_script_service/msgpack/include/msgpack/version_master.h +2 -2
  450. data/ext/enterprise_script_service/msgpack/include/msgpack/zbuffer.h +4 -4
  451. data/ext/enterprise_script_service/msgpack/make_file_list.sh +38 -11
  452. data/ext/enterprise_script_service/msgpack/src/vrefbuffer.c +6 -0
  453. data/ext/enterprise_script_service/msgpack/test/CMakeLists.txt +86 -64
  454. data/ext/enterprise_script_service/msgpack/test/array_ref.cpp +4 -0
  455. data/ext/enterprise_script_service/msgpack/test/boost_fusion.cpp +4 -0
  456. data/ext/enterprise_script_service/msgpack/test/boost_optional.cpp +4 -0
  457. data/ext/enterprise_script_service/msgpack/test/boost_string_ref.cpp +4 -1
  458. data/ext/enterprise_script_service/msgpack/test/boost_string_view.cpp +4 -0
  459. data/ext/enterprise_script_service/msgpack/test/boost_variant.cpp +4 -0
  460. data/ext/enterprise_script_service/msgpack/test/buffer.cpp +4 -47
  461. data/ext/enterprise_script_service/msgpack/test/buffer_c.cpp +148 -0
  462. data/ext/enterprise_script_service/msgpack/test/carray.cpp +4 -0
  463. data/ext/enterprise_script_service/msgpack/test/cases.cpp +8 -4
  464. data/ext/enterprise_script_service/msgpack/test/convert.cpp +8 -4
  465. data/ext/enterprise_script_service/msgpack/test/fixint.cpp +4 -0
  466. data/ext/enterprise_script_service/msgpack/test/fixint_c.cpp +4 -0
  467. data/ext/enterprise_script_service/msgpack/test/fuzz_unpack_pack_fuzzer_cpp11.cpp +4 -0
  468. data/ext/enterprise_script_service/msgpack/test/iterator_cpp11.cpp +4 -0
  469. data/ext/enterprise_script_service/msgpack/test/json.cpp +4 -0
  470. data/ext/enterprise_script_service/msgpack/test/limit.cpp +8 -4
  471. data/ext/enterprise_script_service/msgpack/test/msgpack_basic.cpp +4 -0
  472. data/ext/enterprise_script_service/msgpack/test/msgpack_c.cpp +159 -0
  473. data/ext/enterprise_script_service/msgpack/test/msgpack_container.cpp +4 -0
  474. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp11.cpp +32 -27
  475. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp17.cpp +4 -0
  476. data/ext/enterprise_script_service/msgpack/test/msgpack_stream.cpp +4 -0
  477. data/ext/enterprise_script_service/msgpack/test/msgpack_tuple.cpp +4 -1
  478. data/ext/enterprise_script_service/msgpack/test/msgpack_vref.cpp +4 -0
  479. data/ext/enterprise_script_service/msgpack/test/msgpack_x3_parse.cpp +4 -0
  480. data/ext/enterprise_script_service/msgpack/test/object.cpp +4 -1
  481. data/ext/enterprise_script_service/msgpack/test/object_with_zone.cpp +12 -8
  482. data/ext/enterprise_script_service/msgpack/test/pack_unpack.cpp +30 -26
  483. data/ext/enterprise_script_service/msgpack/test/pack_unpack_c.cpp +4 -0
  484. data/ext/enterprise_script_service/msgpack/test/raw.cpp +4 -0
  485. data/ext/enterprise_script_service/msgpack/test/reference.cpp +4 -0
  486. data/ext/enterprise_script_service/msgpack/test/reference_cpp11.cpp +4 -0
  487. data/ext/enterprise_script_service/msgpack/test/reference_wrapper_cpp11.cpp +4 -0
  488. data/ext/enterprise_script_service/msgpack/test/shared_ptr_cpp11.cpp +4 -0
  489. data/ext/enterprise_script_service/msgpack/test/size_equal_only.cpp +4 -0
  490. data/ext/enterprise_script_service/msgpack/test/streaming.cpp +8 -4
  491. data/ext/enterprise_script_service/msgpack/test/streaming_c.cpp +4 -0
  492. data/ext/enterprise_script_service/msgpack/test/unique_ptr_cpp11.cpp +4 -0
  493. data/ext/enterprise_script_service/msgpack/test/user_class.cpp +16 -12
  494. data/ext/enterprise_script_service/msgpack/test/version.cpp +4 -0
  495. data/ext/enterprise_script_service/msgpack/test/visitor.cpp +4 -0
  496. data/ext/enterprise_script_service/msgpack/test/zone.cpp +4 -0
  497. data/lib/script_core/engine.rb +24 -5
  498. data/lib/script_core/executable.rb +4 -3
  499. data/lib/script_core/version.rb +1 -1
  500. data/lib/tasks/script_core.rake +3 -1
  501. data/script_core.gemspec +1 -2
  502. data/spec/dummy/app/lib/script_engine.rb +64 -5
  503. data/spec/script_core_spec.rb +13 -0
  504. metadata +123 -61
  505. data/ext/enterprise_script_service/libseccomp/src/arch-aarch64-syscalls.c +0 -559
  506. data/ext/enterprise_script_service/libseccomp/src/arch-arm-syscalls.c +0 -570
  507. data/ext/enterprise_script_service/libseccomp/src/arch-mips-syscalls.c +0 -562
  508. data/ext/enterprise_script_service/libseccomp/src/arch-mips64-syscalls.c +0 -562
  509. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32-syscalls.c +0 -562
  510. data/ext/enterprise_script_service/libseccomp/src/arch-parisc-syscalls.c +0 -542
  511. data/ext/enterprise_script_service/libseccomp/src/arch-ppc-syscalls.c +0 -559
  512. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64-syscalls.c +0 -559
  513. data/ext/enterprise_script_service/libseccomp/src/arch-s390-syscalls.c +0 -626
  514. data/ext/enterprise_script_service/libseccomp/src/arch-s390x-syscalls.c +0 -626
  515. data/ext/enterprise_script_service/libseccomp/src/arch-x32-syscalls.c +0 -558
  516. data/ext/enterprise_script_service/libseccomp/src/arch-x86-syscalls.c +0 -692
  517. data/ext/enterprise_script_service/libseccomp/src/arch-x86_64-syscalls.c +0 -559
  518. data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_whitelist.tests +0 -32
  519. data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_blacklist.tests +0 -32
  520. data/ext/enterprise_script_service/mruby/TODO +0 -8
  521. data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
  522. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
  523. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
  524. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
  525. data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
  526. data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
  527. data/ext/enterprise_script_service/mruby/src/mruby_core.rake +0 -19
  528. data/ext/enterprise_script_service/mruby/travis_config.rb +0 -54
  529. data/ext/enterprise_script_service/msgpack/.travis.yml +0 -258
@@ -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