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
@@ -14,61 +14,69 @@
14
14
  #include <mruby/string.h>
15
15
  #include <mruby/debug.h>
16
16
  #include <mruby/error.h>
17
+ #include <mruby/data.h>
18
+ #include <mruby/endian.h>
17
19
 
18
20
  #if SIZE_MAX < UINT32_MAX
19
21
  # error size_t must be at least 32 bits wide
20
22
  #endif
21
23
 
22
- #define FLAG_BYTEORDER_BIG 2
23
- #define FLAG_BYTEORDER_LIL 4
24
- #define FLAG_BYTEORDER_NATIVE 8
25
24
  #define FLAG_SRC_MALLOC 1
26
25
  #define FLAG_SRC_STATIC 0
27
26
 
28
27
  #define SIZE_ERROR_MUL(nmemb, size) ((size_t)(nmemb) > SIZE_MAX / (size))
29
28
 
30
- static size_t
31
- skip_padding(const uint8_t *buf)
32
- {
33
- const size_t align = MRB_DUMP_ALIGNMENT;
34
- return -(intptr_t)buf & (align-1);
35
- }
36
-
37
- static size_t
38
- offset_crc_body(void)
39
- {
40
- struct rite_binary_header header;
41
- return ((uint8_t *)header.binary_crc - (uint8_t *)&header) + sizeof(header.binary_crc);
42
- }
43
-
44
- #ifndef MRB_WITHOUT_FLOAT
45
- double mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck);
29
+ #define DEFINE_READ_IREP_FUNC(funcdecl, basecall) \
30
+ funcdecl \
31
+ { \
32
+ int ai = mrb_gc_arena_save(mrb); \
33
+ struct RProc *proc = basecall; \
34
+ struct mrb_irep *irep = (mrb_irep*)(proc ? proc->body.irep : NULL); \
35
+ if (irep) proc->body.irep = NULL; \
36
+ mrb_gc_arena_restore(mrb, ai); \
37
+ return irep; \
38
+ }
46
39
 
40
+ #ifndef MRB_NO_FLOAT
47
41
  static double
48
- str_to_double(mrb_state *mrb, const char *p, size_t len)
42
+ str_to_double(mrb_state *mrb, const char *p)
49
43
  {
50
- /* `i`, `inf`, `infinity` */
51
- if (len > 0 && p[0] == 'i') return INFINITY;
52
-
53
- /* `I`, `-inf`, `-infinity` */
54
- if (p[0] == 'I' || (len > 1 && p[0] == '-' && p[1] == 'i')) return -INFINITY;
55
- return mrb_str_len_to_dbl(mrb, p, len, TRUE);
44
+ /* dump IEEE754 little endian binary */
45
+ union {
46
+ char s[sizeof(double)];
47
+ double f;
48
+ } u;
49
+
50
+ if (littleendian) {
51
+ memcpy(u.s, p, sizeof(double));
52
+ }
53
+ else {
54
+ size_t i;
55
+ for (i=0; i<sizeof(double); i++) {
56
+ u.s[i] = p[sizeof(double)-i-1];
57
+ }
58
+ }
59
+ return u.f;
56
60
  }
57
61
  #endif
58
62
 
59
- mrb_value mrb_str_len_to_inum(mrb_state *mrb, const char *str, mrb_int len, mrb_int base, int badcheck);
63
+ mrb_value mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, mrb_int base, int badcheck);
60
64
 
61
- static mrb_irep*
62
- read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags)
65
+ static mrb_bool
66
+ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags, mrb_irep **irepp)
63
67
  {
64
68
  int i;
65
69
  const uint8_t *src = bin;
66
70
  ptrdiff_t diff;
67
71
  uint16_t tt, pool_data_len, snl;
68
72
  int plen;
73
+ mrb_pool_value *pool;
74
+ mrb_sym *syms;
69
75
  int ai = mrb_gc_arena_save(mrb);
70
76
  mrb_irep *irep = mrb_add_irep(mrb);
71
77
 
78
+ *irepp = irep;
79
+
72
80
  /* skip record size */
73
81
  src += sizeof(uint32_t);
74
82
 
@@ -81,153 +89,199 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag
81
89
  src += sizeof(uint16_t);
82
90
 
83
91
  /* number of child irep */
84
- irep->rlen = (size_t)bin_to_uint16(src);
92
+ irep->rlen = (uint8_t)bin_to_uint16(src);
85
93
  src += sizeof(uint16_t);
86
94
 
87
95
  /* Binary Data Section */
88
- /* ISEQ BLOCK */
89
- irep->ilen = (uint16_t)bin_to_uint32(src);
90
- src += sizeof(uint32_t);
91
- src += skip_padding(src);
96
+ /* ISEQ BLOCK (and CATCH HANDLER TABLE BLOCK) */
97
+ irep->clen = bin_to_uint16(src); /* number of catch handler */
98
+ src += sizeof(uint16_t);
99
+ irep->ilen = bin_to_uint16(src);
100
+ src += sizeof(uint16_t);
92
101
 
93
102
  if (irep->ilen > 0) {
103
+ size_t data_len = sizeof(mrb_code) * irep->ilen +
104
+ sizeof(struct mrb_irep_catch_handler) * irep->clen;
105
+ mrb_static_assert1(sizeof(struct mrb_irep_catch_handler) == 13);
94
106
  if (SIZE_ERROR_MUL(irep->ilen, sizeof(mrb_code))) {
95
- return NULL;
107
+ return FALSE;
96
108
  }
97
- if ((flags & FLAG_SRC_MALLOC) == 0 &&
98
- (flags & FLAG_BYTEORDER_NATIVE)) {
109
+ if ((flags & FLAG_SRC_MALLOC) == 0) {
99
110
  irep->iseq = (mrb_code*)src;
100
- src += sizeof(mrb_code) * irep->ilen;
101
111
  irep->flags |= MRB_ISEQ_NO_FREE;
102
112
  }
103
113
  else {
104
- size_t data_len = sizeof(mrb_code) * irep->ilen;
105
114
  void *buf = mrb_malloc(mrb, data_len);
106
115
  irep->iseq = (mrb_code *)buf;
107
116
  memcpy(buf, src, data_len);
108
- src += data_len;
109
117
  }
118
+ src += data_len;
110
119
  }
111
120
 
112
121
  /* POOL BLOCK */
113
- plen = bin_to_uint32(src); /* number of pool */
114
- src += sizeof(uint32_t);
122
+ plen = bin_to_uint16(src); /* number of pool */
123
+ src += sizeof(uint16_t);
115
124
  if (plen > 0) {
116
125
  if (SIZE_ERROR_MUL(plen, sizeof(mrb_value))) {
117
- return NULL;
126
+ return FALSE;
118
127
  }
119
- irep->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value) * plen);
128
+ irep->pool = pool = (mrb_pool_value*)mrb_calloc(mrb, sizeof(mrb_pool_value), plen);
120
129
 
121
130
  for (i = 0; i < plen; i++) {
122
- const char *s;
123
131
  mrb_bool st = (flags & FLAG_SRC_MALLOC)==0;
124
132
 
125
133
  tt = *src++; /* pool TT */
126
- pool_data_len = bin_to_uint16(src); /* pool data length */
127
- src += sizeof(uint16_t);
128
- s = (const char*)src;
129
- src += pool_data_len;
130
134
  switch (tt) { /* pool data */
131
- case IREP_TT_FIXNUM: {
132
- mrb_value num = mrb_str_len_to_inum(mrb, s, pool_data_len, 10, FALSE);
133
- #ifdef MRB_WITHOUT_FLOAT
134
- irep->pool[i] = num;
135
+ case IREP_TT_INT32:
136
+ {
137
+ mrb_int v = (int32_t)bin_to_uint32(src);
138
+ src += sizeof(uint32_t);
139
+ #ifdef MRB_64BIT
140
+ pool[i].tt = IREP_TT_INT64;
141
+ pool[i].u.i64 = (int64_t)v;
135
142
  #else
136
- irep->pool[i] = mrb_float_p(num)? mrb_float_pool(mrb, mrb_float(num)) : num;
143
+ pool[i].tt = IREP_TT_INT32;
144
+ pool[i].u.i32 = v;
137
145
  #endif
138
146
  }
139
147
  break;
148
+ case IREP_TT_INT64:
149
+ #ifdef MRB_64BIT
150
+ {
151
+ uint64_t i64 = bin_to_uint32(src);
152
+ src += sizeof(uint32_t);
153
+ i64 <<= 32;
154
+ i64 |= bin_to_uint32(src);
155
+ src += sizeof(uint32_t);
156
+ pool[i].u.i64 = (int64_t)i64;
157
+ }
158
+ break;
159
+ #else
160
+ return FALSE; /* INT64 not supported on MRB_32BIT */
161
+ #endif
140
162
 
141
- #ifndef MRB_WITHOUT_FLOAT
142
163
  case IREP_TT_FLOAT:
143
- irep->pool[i] = mrb_float_pool(mrb, str_to_double(mrb, s, pool_data_len));
164
+ #ifndef MRB_NO_FLOAT
165
+ pool[i].tt = tt;
166
+ pool[i].u.f = str_to_double(mrb, (const char*)src);
167
+ src += sizeof(double);
144
168
  break;
169
+ #else
170
+ return FALSE; /* MRB_NO_FLOAT */
145
171
  #endif
146
172
 
147
- case IREP_TT_STRING:
148
- irep->pool[i] = mrb_str_pool(mrb, s, pool_data_len, st);
173
+ case IREP_TT_STR:
174
+ pool_data_len = bin_to_uint16(src); /* pool data length */
175
+ src += sizeof(uint16_t);
176
+ if (st) {
177
+ pool[i].tt = (pool_data_len<<2) | IREP_TT_SSTR;
178
+ pool[i].u.str = (const char*)src;
179
+ }
180
+ else {
181
+ char *p;
182
+ pool[i].tt = (pool_data_len<<2) | IREP_TT_STR;
183
+ p = (char*)mrb_malloc(mrb, pool_data_len+1);
184
+ memcpy(p, src, pool_data_len+1);
185
+ pool[i].u.str = (const char*)p;
186
+ }
187
+ src += pool_data_len + 1;
149
188
  break;
150
189
 
151
190
  default:
152
191
  /* should not happen */
153
- irep->pool[i] = mrb_nil_value();
154
- break;
192
+ return FALSE;
155
193
  }
156
- irep->plen++;
157
- mrb_gc_arena_restore(mrb, ai);
194
+ irep->plen = i+1;
158
195
  }
159
196
  }
160
197
 
161
198
  /* SYMS BLOCK */
162
- irep->slen = (uint16_t)bin_to_uint32(src); /* syms length */
163
- src += sizeof(uint32_t);
199
+ irep->slen = bin_to_uint16(src); /* syms length */
200
+ src += sizeof(uint16_t);
164
201
  if (irep->slen > 0) {
165
202
  if (SIZE_ERROR_MUL(irep->slen, sizeof(mrb_sym))) {
166
- return NULL;
203
+ return FALSE;
167
204
  }
168
- irep->syms = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym) * irep->slen);
205
+ irep->syms = syms = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym) * irep->slen);
169
206
 
170
207
  for (i = 0; i < irep->slen; i++) {
171
208
  snl = bin_to_uint16(src); /* symbol name length */
172
209
  src += sizeof(uint16_t);
173
210
 
174
211
  if (snl == MRB_DUMP_NULL_SYM_LEN) {
175
- irep->syms[i] = 0;
212
+ syms[i] = 0;
176
213
  continue;
177
214
  }
178
215
 
179
216
  if (flags & FLAG_SRC_MALLOC) {
180
- irep->syms[i] = mrb_intern(mrb, (char *)src, snl);
217
+ syms[i] = mrb_intern(mrb, (char *)src, snl);
181
218
  }
182
219
  else {
183
- irep->syms[i] = mrb_intern_static(mrb, (char *)src, snl);
220
+ syms[i] = mrb_intern_static(mrb, (char *)src, snl);
184
221
  }
185
222
  src += snl + 1;
186
-
187
223
  mrb_gc_arena_restore(mrb, ai);
188
224
  }
189
225
  }
190
226
 
191
- irep->reps = (mrb_irep**)mrb_malloc(mrb, sizeof(mrb_irep*)*irep->rlen);
192
-
193
227
  diff = src - bin;
194
228
  mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
195
229
  *len = (size_t)diff;
196
230
 
197
- return irep;
231
+ return TRUE;
198
232
  }
199
233
 
200
- static mrb_irep*
201
- read_irep_record(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags)
234
+ static mrb_bool
235
+ read_irep_record(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags, mrb_irep **irepp)
202
236
  {
203
- mrb_irep *irep = read_irep_record_1(mrb, bin, len, flags);
237
+ int ai = mrb_gc_arena_save(mrb);
238
+ mrb_bool readsuccess = read_irep_record_1(mrb, bin, len, flags, irepp);
239
+ mrb_irep **reps;
204
240
  int i;
205
241
 
206
- if (irep == NULL) {
207
- return NULL;
242
+ mrb_gc_arena_restore(mrb, ai);
243
+ if (!readsuccess) {
244
+ return FALSE;
208
245
  }
209
246
 
247
+ reps = (mrb_irep**)mrb_calloc(mrb, (*irepp)->rlen, sizeof(mrb_irep*));
248
+ (*irepp)->reps = (const mrb_irep**)reps;
249
+
210
250
  bin += *len;
211
- for (i=0; i<irep->rlen; i++) {
251
+ for (i=0; i<(*irepp)->rlen; i++) {
212
252
  size_t rlen;
213
253
 
214
- irep->reps[i] = read_irep_record(mrb, bin, &rlen, flags);
215
- if (irep->reps[i] == NULL) {
216
- return NULL;
254
+ readsuccess = read_irep_record(mrb, bin, &rlen, flags, &reps[i]);
255
+ mrb_gc_arena_restore(mrb, ai);
256
+ if (!readsuccess) {
257
+ return FALSE;
217
258
  }
218
259
  bin += rlen;
219
260
  *len += rlen;
220
261
  }
221
- return irep;
262
+
263
+ return TRUE;
222
264
  }
223
265
 
224
266
  static mrb_irep*
225
- read_section_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags)
267
+ read_section_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags, struct RProc **proc)
226
268
  {
227
269
  size_t len;
228
270
 
271
+ /*
272
+ * This proc object keeps all the data in progress to avoid memory leaks
273
+ * if something goes wrong while reading irep.
274
+ */
275
+ *proc = mrb_proc_new(mrb, NULL);
276
+
277
+ mrb_irep **irepp = (mrb_irep**)&(*proc)->body.irep;
229
278
  bin += sizeof(struct rite_section_irep_header);
230
- return read_irep_record(mrb, bin, &len, flags);
279
+ if (read_irep_record(mrb, bin, &len, flags, irepp)) {
280
+ return *irepp;
281
+ }
282
+ else {
283
+ return NULL;
284
+ }
231
285
  }
232
286
 
233
287
  static int
@@ -238,25 +292,26 @@ read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, size_t *
238
292
  size_t record_size;
239
293
  uint16_t f_idx;
240
294
  int i;
295
+ mrb_irep_debug_info *debug;
241
296
 
242
297
  if (irep->debug_info) { return MRB_DUMP_INVALID_IREP; }
243
298
 
244
- irep->debug_info = (mrb_irep_debug_info*)mrb_malloc(mrb, sizeof(mrb_irep_debug_info));
245
- irep->debug_info->pc_count = (uint32_t)irep->ilen;
299
+ irep->debug_info = debug = (mrb_irep_debug_info*)mrb_calloc(mrb, 1, sizeof(mrb_irep_debug_info));
300
+ debug->pc_count = (uint32_t)irep->ilen;
246
301
 
247
302
  record_size = (size_t)bin_to_uint32(bin);
248
303
  bin += sizeof(uint32_t);
249
304
 
250
- irep->debug_info->flen = bin_to_uint16(bin);
251
- irep->debug_info->files = (mrb_irep_debug_info_file**)mrb_malloc(mrb, sizeof(mrb_irep_debug_info*) * irep->debug_info->flen);
305
+ debug->flen = bin_to_uint16(bin);
306
+ debug->files = (mrb_irep_debug_info_file**)mrb_calloc(mrb, irep->debug_info->flen, sizeof(mrb_irep_debug_info*));
252
307
  bin += sizeof(uint16_t);
253
308
 
254
- for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
309
+ for (f_idx = 0; f_idx < debug->flen; ++f_idx) {
255
310
  mrb_irep_debug_info_file *file;
256
311
  uint16_t filename_idx;
257
312
 
258
- file = (mrb_irep_debug_info_file *)mrb_malloc(mrb, sizeof(*file));
259
- irep->debug_info->files[f_idx] = file;
313
+ file = (mrb_irep_debug_info_file *)mrb_calloc(mrb, 1, sizeof(*file));
314
+ debug->files[f_idx] = file;
260
315
 
261
316
  file->start_pos = bin_to_uint32(bin);
262
317
  bin += sizeof(uint32_t);
@@ -285,8 +340,8 @@ read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, size_t *
285
340
  case mrb_debug_line_flat_map: {
286
341
  uint32_t l;
287
342
 
288
- file->lines.flat_map = (mrb_irep_debug_info_line*)mrb_malloc(
289
- mrb, sizeof(mrb_irep_debug_info_line) * (size_t)(file->line_entry_count));
343
+ file->lines.flat_map = (mrb_irep_debug_info_line*)mrb_calloc(
344
+ mrb, (size_t)(file->line_entry_count), sizeof(mrb_irep_debug_info_line));
290
345
  for (l = 0; l < file->line_entry_count; ++l) {
291
346
  file->lines.flat_map[l].start_pos = bin_to_uint32(bin);
292
347
  bin += sizeof(uint32_t);
@@ -310,7 +365,7 @@ read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, size_t *
310
365
  size_t len;
311
366
  int ret;
312
367
 
313
- ret = read_debug_record(mrb, bin, irep->reps[i], &len, filenames, filenames_len);
368
+ ret = read_debug_record(mrb, bin, (mrb_irep*)irep->reps[i], &len, filenames, filenames_len);
314
369
  if (ret != MRB_DUMP_OK) return ret;
315
370
  bin += len;
316
371
  }
@@ -333,6 +388,7 @@ read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t
333
388
  int result;
334
389
  uint16_t filenames_len;
335
390
  mrb_sym *filenames;
391
+ mrb_value filenames_obj;
336
392
 
337
393
  bin = start;
338
394
  header = (struct rite_section_debug_header *)bin;
@@ -340,7 +396,8 @@ read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t
340
396
 
341
397
  filenames_len = bin_to_uint16(bin);
342
398
  bin += sizeof(uint16_t);
343
- filenames = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * (size_t)filenames_len);
399
+ filenames_obj = mrb_str_new(mrb, NULL, sizeof(mrb_sym) * (size_t)filenames_len);
400
+ filenames = (mrb_sym*)RSTRING_PTR(filenames_obj);
344
401
  for (i = 0; i < filenames_len; ++i) {
345
402
  uint16_t f_len = bin_to_uint16(bin);
346
403
  bin += sizeof(uint16_t);
@@ -364,7 +421,7 @@ read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t
364
421
  }
365
422
 
366
423
  debug_exit:
367
- mrb_free(mrb, filenames);
424
+ mrb_str_resize(mrb, filenames_obj, 0);
368
425
  return result;
369
426
  }
370
427
 
@@ -372,34 +429,31 @@ static int
372
429
  read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *record_len, mrb_sym const *syms, uint32_t syms_len)
373
430
  {
374
431
  const uint8_t *bin = start;
432
+ mrb_sym *lv;
375
433
  ptrdiff_t diff;
376
434
  int i;
377
435
 
378
- irep->lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (irep->nlocals - 1));
436
+ irep->lv = lv = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * (irep->nlocals - 1));
379
437
 
380
- for (i = 0; i + 1< irep->nlocals; ++i) {
438
+ for (i = 0; i + 1 < irep->nlocals; ++i) {
381
439
  uint16_t const sym_idx = bin_to_uint16(bin);
382
440
  bin += sizeof(uint16_t);
383
441
  if (sym_idx == RITE_LV_NULL_MARK) {
384
- irep->lv[i].name = 0;
385
- irep->lv[i].r = 0;
442
+ lv[i] = 0;
386
443
  }
387
444
  else {
388
445
  if (sym_idx >= syms_len) {
389
446
  return MRB_DUMP_GENERAL_FAILURE;
390
447
  }
391
- irep->lv[i].name = syms[sym_idx];
392
-
393
- irep->lv[i].r = bin_to_uint16(bin);
448
+ lv[i] = syms[sym_idx];
394
449
  }
395
- bin += sizeof(uint16_t);
396
450
  }
397
451
 
398
452
  for (i = 0; i < irep->rlen; ++i) {
399
453
  size_t len;
400
454
  int ret;
401
455
 
402
- ret = read_lv_record(mrb, bin, irep->reps[i], &len, syms, syms_len);
456
+ ret = read_lv_record(mrb, bin, (mrb_irep*)irep->reps[i], &len, syms, syms_len);
403
457
  if (ret != MRB_DUMP_OK) return ret;
404
458
  bin += len;
405
459
  }
@@ -422,6 +476,7 @@ read_section_lv(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t fl
422
476
  int result;
423
477
  uint32_t syms_len;
424
478
  mrb_sym *syms;
479
+ mrb_value syms_obj;
425
480
  mrb_sym (*intern_func)(mrb_state*, const char*, size_t) =
426
481
  (flags & FLAG_SRC_MALLOC)? mrb_intern : mrb_intern_static;
427
482
 
@@ -431,7 +486,8 @@ read_section_lv(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t fl
431
486
 
432
487
  syms_len = bin_to_uint32(bin);
433
488
  bin += sizeof(uint32_t);
434
- syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * (size_t)syms_len);
489
+ syms_obj = mrb_str_new(mrb, NULL, sizeof(mrb_sym) * (size_t)syms_len);
490
+ syms = (mrb_sym*)RSTRING_PTR(syms_obj);
435
491
  for (i = 0; i < syms_len; ++i) {
436
492
  uint16_t const str_len = bin_to_uint16(bin);
437
493
  bin += sizeof(uint16_t);
@@ -451,12 +507,12 @@ read_section_lv(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, uint8_t fl
451
507
  }
452
508
 
453
509
  lv_exit:
454
- mrb_free(mrb, syms);
510
+ mrb_str_resize(mrb, syms_obj, 0);
455
511
  return result;
456
512
  }
457
513
 
458
514
  static int
459
- read_binary_header(const uint8_t *bin, size_t bufsize, size_t *bin_size, uint16_t *crc, uint8_t *flags)
515
+ read_binary_header(const uint8_t *bin, size_t bufsize, size_t *bin_size, uint8_t *flags)
460
516
  {
461
517
  const struct rite_binary_header *header = (const struct rite_binary_header *)bin;
462
518
 
@@ -464,29 +520,19 @@ read_binary_header(const uint8_t *bin, size_t bufsize, size_t *bin_size, uint16_
464
520
  return MRB_DUMP_READ_FAULT;
465
521
  }
466
522
 
467
- if (memcmp(header->binary_ident, RITE_BINARY_IDENT, sizeof(header->binary_ident)) == 0) {
468
- if (bigendian_p())
469
- *flags |= FLAG_BYTEORDER_NATIVE;
470
- else
471
- *flags |= FLAG_BYTEORDER_BIG;
472
- }
473
- else if (memcmp(header->binary_ident, RITE_BINARY_IDENT_LIL, sizeof(header->binary_ident)) == 0) {
474
- if (bigendian_p())
475
- *flags |= FLAG_BYTEORDER_LIL;
476
- else
477
- *flags |= FLAG_BYTEORDER_NATIVE;
478
- }
479
- else {
523
+ if (memcmp(header->binary_ident, RITE_BINARY_IDENT, sizeof(header->binary_ident)) != 0) {
480
524
  return MRB_DUMP_INVALID_FILE_HEADER;
481
525
  }
482
526
 
483
- if (memcmp(header->binary_version, RITE_BINARY_FORMAT_VER, sizeof(header->binary_version)) != 0) {
527
+ /* if major version is different, they are incompatible */
528
+ if (memcmp(header->major_version, RITE_BINARY_MAJOR_VER, sizeof(header->major_version)) != 0) {
484
529
  return MRB_DUMP_INVALID_FILE_HEADER;
485
530
  }
486
-
487
- if (crc) {
488
- *crc = bin_to_uint16(header->binary_crc);
531
+ /* if minor version is different, we can accept the older version */
532
+ if (memcmp(header->minor_version, RITE_BINARY_MINOR_VER, sizeof(header->minor_version)) > 0) {
533
+ return MRB_DUMP_INVALID_FILE_HEADER;
489
534
  }
535
+
490
536
  *bin_size = (size_t)bin_to_uint32(header->binary_size);
491
537
 
492
538
  if (bufsize < *bin_size) {
@@ -496,35 +542,29 @@ read_binary_header(const uint8_t *bin, size_t bufsize, size_t *bin_size, uint16_
496
542
  return MRB_DUMP_OK;
497
543
  }
498
544
 
499
- static mrb_irep*
545
+ static struct RProc*
500
546
  read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags)
501
547
  {
502
548
  int result;
549
+ struct RProc *proc = NULL;
503
550
  mrb_irep *irep = NULL;
504
551
  const struct rite_section_header *section_header;
505
- uint16_t crc;
506
552
  size_t bin_size = 0;
507
- size_t n;
508
553
 
509
554
  if ((mrb == NULL) || (bin == NULL)) {
510
555
  return NULL;
511
556
  }
512
557
 
513
- result = read_binary_header(bin, bufsize, &bin_size, &crc, &flags);
558
+ result = read_binary_header(bin, bufsize, &bin_size, &flags);
514
559
  if (result != MRB_DUMP_OK) {
515
560
  return NULL;
516
561
  }
517
562
 
518
- n = offset_crc_body();
519
- if (crc != calc_crc_16_ccitt(bin + n, bin_size - n, 0)) {
520
- return NULL;
521
- }
522
-
523
563
  bin += sizeof(struct rite_binary_header);
524
564
  do {
525
565
  section_header = (const struct rite_section_header *)bin;
526
566
  if (memcmp(section_header->section_ident, RITE_SECTION_IREP_IDENT, sizeof(section_header->section_ident)) == 0) {
527
- irep = read_section_irep(mrb, bin, flags);
567
+ irep = read_section_irep(mrb, bin, flags, &proc);
528
568
  if (!irep) return NULL;
529
569
  }
530
570
  else if (memcmp(section_header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(section_header->section_ident)) == 0) {
@@ -544,11 +584,11 @@ read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags)
544
584
  bin += bin_to_uint32(section_header->section_size);
545
585
  } while (memcmp(section_header->section_ident, RITE_BINARY_EOF, sizeof(section_header->section_ident)) != 0);
546
586
 
547
- return irep;
587
+ return proc;
548
588
  }
549
589
 
550
- mrb_irep*
551
- mrb_read_irep(mrb_state *mrb, const uint8_t *bin)
590
+ static struct RProc*
591
+ mrb_proc_read_irep(mrb_state *mrb, const uint8_t *bin)
552
592
  {
553
593
  #if defined(MRB_USE_LINK_TIME_RO_DATA_P) || defined(MRB_USE_CUSTOM_RO_DATA_P)
554
594
  uint8_t flags = mrb_ro_data_p((char*)bin) ? FLAG_SRC_STATIC : FLAG_SRC_MALLOC;
@@ -559,34 +599,38 @@ mrb_read_irep(mrb_state *mrb, const uint8_t *bin)
559
599
  return read_irep(mrb, bin, (size_t)-1, flags);
560
600
  }
561
601
 
562
- MRB_API mrb_irep*
563
- mrb_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize)
602
+ DEFINE_READ_IREP_FUNC(
603
+ mrb_irep *mrb_read_irep(mrb_state *mrb, const uint8_t *bin),
604
+ mrb_proc_read_irep(mrb, bin))
605
+
606
+ static struct RProc*
607
+ mrb_proc_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize)
564
608
  {
565
609
  return read_irep(mrb, (const uint8_t *)buf, bufsize, FLAG_SRC_MALLOC);
566
610
  }
567
611
 
612
+ DEFINE_READ_IREP_FUNC(
613
+ MRB_API mrb_irep *mrb_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize),
614
+ mrb_proc_read_irep_buf(mrb, buf, bufsize))
615
+
568
616
  void mrb_exc_set(mrb_state *mrb, mrb_value exc);
569
617
 
570
618
  static void
571
619
  irep_error(mrb_state *mrb)
572
620
  {
573
- mrb_exc_set(mrb, mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "irep load error"));
621
+ mrb_exc_set(mrb, mrb_exc_new_lit(mrb, E_SCRIPT_ERROR, "irep load error"));
574
622
  }
575
623
 
576
624
  void mrb_codedump_all(mrb_state*, struct RProc*);
577
625
 
578
626
  static mrb_value
579
- load_irep(mrb_state *mrb, mrb_irep *irep, mrbc_context *c)
627
+ load_irep(mrb_state *mrb, struct RProc *proc, mrbc_context *c)
580
628
  {
581
- struct RProc *proc;
582
-
583
- if (!irep) {
629
+ if (!proc || !proc->body.irep) {
584
630
  irep_error(mrb);
585
631
  return mrb_nil_value();
586
632
  }
587
- proc = mrb_proc_new(mrb, irep);
588
633
  proc->c = NULL;
589
- mrb_irep_decref(mrb, irep);
590
634
  if (c && c->dump_result) mrb_codedump_all(mrb, proc);
591
635
  if (c && c->no_exec) return mrb_obj_value(proc);
592
636
  return mrb_top_run(mrb, proc, mrb_top_self(mrb), 0);
@@ -595,13 +639,15 @@ load_irep(mrb_state *mrb, mrb_irep *irep, mrbc_context *c)
595
639
  MRB_API mrb_value
596
640
  mrb_load_irep_cxt(mrb_state *mrb, const uint8_t *bin, mrbc_context *c)
597
641
  {
598
- return load_irep(mrb, mrb_read_irep(mrb, bin), c);
642
+ struct RProc *proc = mrb_proc_read_irep(mrb, bin);
643
+ if (!proc) return mrb_undef_value();
644
+ return load_irep(mrb, proc, c);
599
645
  }
600
646
 
601
647
  MRB_API mrb_value
602
648
  mrb_load_irep_buf_cxt(mrb_state *mrb, const void *buf, size_t bufsize, mrbc_context *c)
603
649
  {
604
- return load_irep(mrb, mrb_read_irep_buf(mrb, buf, bufsize), c);
650
+ return load_irep(mrb, mrb_proc_read_irep_buf(mrb, buf, bufsize), c);
605
651
  }
606
652
 
607
653
  MRB_API mrb_value
@@ -616,12 +662,18 @@ mrb_load_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize)
616
662
  return mrb_load_irep_buf_cxt(mrb, buf, bufsize, NULL);
617
663
  }
618
664
 
619
- #ifndef MRB_DISABLE_STDIO
665
+ MRB_API mrb_value
666
+ mrb_load_proc(mrb_state *mrb, const struct RProc *proc)
667
+ {
668
+ return mrb_vm_run(mrb, proc, mrb_top_self(mrb), 0);
669
+ }
670
+
671
+ #ifndef MRB_NO_STDIO
620
672
 
621
- mrb_irep*
622
- mrb_read_irep_file(mrb_state *mrb, FILE* fp)
673
+ static struct RProc*
674
+ mrb_proc_read_irep_file(mrb_state *mrb, FILE *fp)
623
675
  {
624
- mrb_irep *irep = NULL;
676
+ struct RProc *proc = NULL;
625
677
  uint8_t *buf;
626
678
  const size_t header_size = sizeof(struct rite_binary_header);
627
679
  size_t buf_size = 0;
@@ -636,7 +688,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp)
636
688
  if (fread(buf, header_size, 1, fp) == 0) {
637
689
  goto irep_exit;
638
690
  }
639
- result = read_binary_header(buf, (size_t)-1, &buf_size, NULL, &flags);
691
+ result = read_binary_header(buf, (size_t)-1, &buf_size, &flags);
640
692
  if (result != MRB_DUMP_OK || buf_size <= header_size) {
641
693
  goto irep_exit;
642
694
  }
@@ -645,17 +697,21 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp)
645
697
  if (fread(buf+header_size, buf_size-header_size, 1, fp) == 0) {
646
698
  goto irep_exit;
647
699
  }
648
- irep = read_irep(mrb, buf, (size_t)-1, FLAG_SRC_MALLOC);
700
+ proc = read_irep(mrb, buf, (size_t)-1, FLAG_SRC_MALLOC);
649
701
 
650
702
  irep_exit:
651
703
  mrb_free(mrb, buf);
652
- return irep;
704
+ return proc;
653
705
  }
654
706
 
707
+ DEFINE_READ_IREP_FUNC(
708
+ mrb_irep *mrb_read_irep_file(mrb_state *mrb, FILE *fp),
709
+ mrb_proc_read_irep_file(mrb, fp))
710
+
655
711
  MRB_API mrb_value
656
712
  mrb_load_irep_file_cxt(mrb_state *mrb, FILE* fp, mrbc_context *c)
657
713
  {
658
- return load_irep(mrb, mrb_read_irep_file(mrb, fp), c);
714
+ return load_irep(mrb, mrb_proc_read_irep_file(mrb, fp), c);
659
715
  }
660
716
 
661
717
  MRB_API mrb_value
@@ -663,4 +719,4 @@ mrb_load_irep_file(mrb_state *mrb, FILE* fp)
663
719
  {
664
720
  return mrb_load_irep_file_cxt(mrb, fp, NULL);
665
721
  }
666
- #endif /* MRB_DISABLE_STDIO */
722
+ #endif /* MRB_NO_STDIO */