script_core 0.2.7 → 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 (283) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +2 -2
  4. data/ext/enterprise_script_service/Rakefile +1 -1
  5. data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +117 -74
  6. data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +41 -37
  7. data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
  8. data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
  9. data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
  10. data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
  11. data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
  12. data/ext/enterprise_script_service/mruby/.travis.yml +2 -2
  13. data/ext/enterprise_script_service/mruby/.yamllint +8 -0
  14. data/ext/enterprise_script_service/mruby/AUTHORS +3 -0
  15. data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
  16. data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
  17. data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
  18. data/ext/enterprise_script_service/mruby/LICENSE +1 -1
  19. data/ext/enterprise_script_service/mruby/Makefile +1 -1
  20. data/ext/enterprise_script_service/mruby/README.md +4 -14
  21. data/ext/enterprise_script_service/mruby/Rakefile +18 -108
  22. data/ext/enterprise_script_service/mruby/TODO.md +17 -0
  23. data/ext/enterprise_script_service/mruby/appveyor.yml +31 -25
  24. data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
  25. data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
  26. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +2 -19
  27. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +2 -2
  28. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +1 -18
  29. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +2 -19
  30. data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
  31. data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
  32. 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
  33. data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
  34. data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
  35. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +2 -19
  36. data/ext/enterprise_script_service/mruby/{travis_config.rb → build_config/ci/gcc-clang.rb} +10 -10
  37. data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
  38. data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
  39. data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
  40. data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
  41. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_dreamcast_shelf.rb → build_config/dreamcast_shelf.rb} +5 -19
  42. data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
  43. data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
  44. data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
  45. data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
  46. data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
  47. data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
  48. data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
  49. data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
  50. data/ext/enterprise_script_service/mruby/doc/guides/compile.md +138 -49
  51. data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
  52. data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
  53. data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +49 -22
  54. data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
  55. data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
  56. data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
  57. data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
  58. data/ext/enterprise_script_service/mruby/doc/opcode.md +93 -107
  59. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
  60. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
  61. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
  62. data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
  63. data/ext/enterprise_script_service/mruby/include/mrbconf.h +81 -62
  64. data/ext/enterprise_script_service/mruby/include/mruby.h +137 -96
  65. data/ext/enterprise_script_service/mruby/include/mruby/array.h +23 -6
  66. data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +73 -48
  67. data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
  68. data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +79 -48
  69. data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
  70. data/ext/enterprise_script_service/mruby/include/mruby/common.h +4 -1
  71. data/ext/enterprise_script_service/mruby/include/mruby/compile.h +13 -7
  72. data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
  73. data/ext/enterprise_script_service/mruby/include/mruby/dump.h +17 -35
  74. data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
  75. data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
  76. data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
  77. data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
  78. data/ext/enterprise_script_service/mruby/include/mruby/irep.h +64 -14
  79. data/ext/enterprise_script_service/mruby/include/mruby/khash.h +6 -14
  80. data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +36 -63
  81. data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
  82. data/ext/enterprise_script_service/mruby/include/mruby/ops.h +27 -23
  83. data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
  84. data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
  85. data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
  86. data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
  87. data/ext/enterprise_script_service/mruby/include/mruby/proc.h +80 -13
  88. data/ext/enterprise_script_service/mruby/include/mruby/string.h +10 -15
  89. data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
  90. data/ext/enterprise_script_service/mruby/include/mruby/value.h +29 -19
  91. data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
  92. data/ext/enterprise_script_service/mruby/include/mruby/version.h +26 -7
  93. data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -44
  94. data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +55 -37
  95. data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
  96. data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
  97. data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +75 -32
  98. data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
  99. data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
  100. data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
  101. data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
  102. data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -88
  103. data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
  104. data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
  105. data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
  106. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -1
  107. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +5 -4
  108. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +28 -19
  109. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
  110. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
  111. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
  112. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
  113. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
  114. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -3
  115. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
  116. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +4 -4
  117. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
  118. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
  119. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +41 -34
  120. data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
  121. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
  122. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +19 -9
  123. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
  124. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -1
  125. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +22 -6
  126. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
  127. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +2 -2
  128. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
  129. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
  130. data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +2 -1
  131. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +430 -399
  132. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
  133. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
  134. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +559 -217
  135. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +4774 -4193
  136. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +18 -19
  137. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +1 -1
  138. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +8 -7
  139. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
  140. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
  141. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
  142. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -2
  143. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +17 -25
  144. data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +18 -13
  145. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +30 -2
  146. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
  147. data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +2 -2
  148. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
  149. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +2 -2
  150. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
  151. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +2 -2
  152. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +55 -52
  153. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +4 -2
  154. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +99 -87
  155. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +2 -0
  156. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +2 -3
  157. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +1 -1
  158. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +7 -6
  159. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
  160. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
  161. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +43 -58
  162. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +4 -4
  163. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
  164. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +77 -74
  165. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
  166. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
  167. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +5 -4
  168. data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -12
  169. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
  170. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
  171. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
  172. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
  173. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +38 -88
  174. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
  175. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +62 -26
  176. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +32 -19
  177. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
  178. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
  179. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
  180. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
  181. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +20 -40
  182. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
  183. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +11 -17
  184. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
  185. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
  186. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
  187. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +4 -4
  188. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
  189. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
  190. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +102 -71
  191. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +4 -2
  192. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
  193. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +13 -9
  194. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
  195. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +18 -25
  196. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +6 -5
  197. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
  198. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
  199. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
  200. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +16 -44
  201. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
  202. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +27 -27
  203. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
  204. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
  205. data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
  206. data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
  207. data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
  208. data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
  209. data/ext/enterprise_script_service/mruby/mrblib/hash.rb +0 -20
  210. data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
  211. data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
  212. data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
  213. data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
  214. data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
  215. data/ext/enterprise_script_service/mruby/src/array.c +43 -80
  216. data/ext/enterprise_script_service/mruby/src/backtrace.c +16 -17
  217. data/ext/enterprise_script_service/mruby/src/class.c +774 -182
  218. data/ext/enterprise_script_service/mruby/src/codedump.c +223 -198
  219. data/ext/enterprise_script_service/mruby/src/debug.c +6 -6
  220. data/ext/enterprise_script_service/mruby/src/dump.c +466 -141
  221. data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
  222. data/ext/enterprise_script_service/mruby/src/error.c +36 -13
  223. data/ext/enterprise_script_service/mruby/src/etc.c +43 -34
  224. data/ext/enterprise_script_service/mruby/src/fmt_fp.c +5 -6
  225. data/ext/enterprise_script_service/mruby/src/gc.c +73 -71
  226. data/ext/enterprise_script_service/mruby/src/hash.c +1050 -707
  227. data/ext/enterprise_script_service/mruby/src/kernel.c +75 -220
  228. data/ext/enterprise_script_service/mruby/src/load.c +196 -166
  229. data/ext/enterprise_script_service/mruby/src/numeric.c +352 -314
  230. data/ext/enterprise_script_service/mruby/src/object.c +97 -90
  231. data/ext/enterprise_script_service/mruby/src/print.c +4 -3
  232. data/ext/enterprise_script_service/mruby/src/proc.c +48 -56
  233. data/ext/enterprise_script_service/mruby/src/range.c +45 -21
  234. data/ext/enterprise_script_service/mruby/src/state.c +25 -32
  235. data/ext/enterprise_script_service/mruby/src/string.c +59 -101
  236. data/ext/enterprise_script_service/mruby/src/symbol.c +121 -56
  237. data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
  238. data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
  239. data/ext/enterprise_script_service/mruby/src/vm.c +617 -602
  240. data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
  241. data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
  242. data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
  243. data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
  244. data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +83 -77
  245. data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
  246. data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
  247. data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
  248. data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
  249. data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
  250. data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +6 -5
  251. data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +10 -14
  252. data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +17 -21
  253. data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
  254. data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
  255. data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
  256. data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
  257. data/ext/enterprise_script_service/mruby/test/t/float.rb +18 -8
  258. data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
  259. data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
  260. data/ext/enterprise_script_service/mruby/test/t/kernel.rb +1 -1
  261. data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
  262. data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
  263. data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
  264. data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
  265. data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
  266. data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
  267. data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
  268. data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
  269. data/ext/enterprise_script_service/mruby_config.rb +2 -5
  270. data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
  271. data/lib/script_core/version.rb +1 -1
  272. data/spec/script_core_spec.rb +13 -0
  273. metadata +61 -23
  274. data/ext/enterprise_script_service/mruby/.github/workflows/main.yml +0 -24
  275. data/ext/enterprise_script_service/mruby/TODO +0 -8
  276. data/ext/enterprise_script_service/mruby/appveyor_config.rb +0 -46
  277. data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
  278. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
  279. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
  280. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
  281. data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
  282. data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
  283. data/ext/enterprise_script_service/mruby/src/mruby_core.rake +0 -19
@@ -21,7 +21,14 @@ typedef struct mrb_shared_array {
21
21
  mrb_value *ptr;
22
22
  } mrb_shared_array;
23
23
 
24
- #define MRB_ARY_EMBED_LEN_MAX ((mrb_int)(sizeof(void*)*3/sizeof(mrb_value)))
24
+ #if defined(MRB_32BIT) && defined(MRB_NO_BOXING)
25
+ # define MRB_ARY_NO_EMBED
26
+ # define MRB_ARY_EMBED_LEN_MAX 0
27
+ #else
28
+ # define MRB_ARY_EMBED_LEN_MAX ((mrb_int)(sizeof(void*)*3/sizeof(mrb_value)))
29
+ mrb_static_assert(MRB_ARY_EMBED_LEN_MAX > 0, "MRB_ARY_EMBED_LEN_MAX > 0");
30
+ #endif
31
+
25
32
  struct RArray {
26
33
  MRB_OBJECT_HEADER;
27
34
  union {
@@ -33,7 +40,9 @@ struct RArray {
33
40
  } aux;
34
41
  mrb_value *ptr;
35
42
  } heap;
36
- void *ary[3];
43
+ #ifndef MRB_ARY_NO_EMBED
44
+ mrb_value ary[MRB_ARY_EMBED_LEN_MAX];
45
+ #endif
37
46
  } as;
38
47
  };
39
48
 
@@ -41,12 +50,20 @@ struct RArray {
41
50
  #define mrb_ary_value(p) mrb_obj_value((void*)(p))
42
51
  #define RARRAY(v) ((struct RArray*)(mrb_ptr(v)))
43
52
 
53
+ #ifdef MRB_ARY_NO_EMBED
54
+ #define ARY_EMBED_P(a) 0
55
+ #define ARY_UNSET_EMBED_FLAG(a) (void)0
56
+ #define ARY_EMBED_LEN(a) 0
57
+ #define ARY_SET_EMBED_LEN(a,len) (void)0
58
+ #define ARY_EMBED_PTR(a) 0
59
+ #else
44
60
  #define MRB_ARY_EMBED_MASK 7
45
61
  #define ARY_EMBED_P(a) ((a)->flags & MRB_ARY_EMBED_MASK)
46
62
  #define ARY_UNSET_EMBED_FLAG(a) ((a)->flags &= ~(MRB_ARY_EMBED_MASK))
47
63
  #define ARY_EMBED_LEN(a) ((mrb_int)(((a)->flags & MRB_ARY_EMBED_MASK) - 1))
48
64
  #define ARY_SET_EMBED_LEN(a,len) ((a)->flags = ((a)->flags&~MRB_ARY_EMBED_MASK) | ((uint32_t)(len) + 1))
49
- #define ARY_EMBED_PTR(a) ((mrb_value*)(&(a)->as.ary))
65
+ #define ARY_EMBED_PTR(a) ((a)->as.ary)
66
+ #endif
50
67
 
51
68
  #define ARY_LEN(a) (ARY_EMBED_P(a)?ARY_EMBED_LEN(a):(a)->as.heap.len)
52
69
  #define ARY_PTR(a) (ARY_EMBED_P(a)?ARY_EMBED_PTR(a):(a)->as.heap.ptr)
@@ -232,10 +249,10 @@ MRB_API mrb_value mrb_ary_entry(mrb_value ary, mrb_int offset);
232
249
  *
233
250
  * Equivalent to:
234
251
  *
235
- * ary.shift
252
+ * ary[head, len] = rpl
236
253
  *
237
254
  * @param mrb The mruby state reference.
238
- * @param self The array from which the value will be shifted.
255
+ * @param self The array from which the value will be partiality replaced.
239
256
  * @param head Beginning position of a replacement subsequence.
240
257
  * @param len Length of a replacement subsequence.
241
258
  * @param rpl The array of replacement elements.
@@ -279,7 +296,7 @@ MRB_API mrb_value mrb_ary_clear(mrb_state *mrb, mrb_value self);
279
296
  *
280
297
  * @param mrb The mruby state reference.
281
298
  * @param ary The target array
282
- * @param sep The separater, can be NULL
299
+ * @param sep The separator, can be NULL
283
300
  */
284
301
  MRB_API mrb_value mrb_ary_join(mrb_state *mrb, mrb_value ary, mrb_value sep);
285
302
 
@@ -7,12 +7,12 @@
7
7
  #ifndef MRUBY_BOXING_NAN_H
8
8
  #define MRUBY_BOXING_NAN_H
9
9
 
10
- #ifdef MRB_USE_FLOAT
11
- # error ---->> MRB_NAN_BOXING and MRB_USE_FLOAT conflict <<----
10
+ #ifdef MRB_USE_FLOAT32
11
+ # error ---->> MRB_NAN_BOXING and MRB_USE_FLOAT32 conflict <<----
12
12
  #endif
13
13
 
14
- #ifdef MRB_WITHOUT_FLOAT
15
- # error ---->> MRB_NAN_BOXING and MRB_WITHOUT_FLOAT conflict <<----
14
+ #ifdef MRB_NO_FLOAT
15
+ # error ---->> MRB_NAN_BOXING and MRB_NO_FLOAT conflict <<----
16
16
  #endif
17
17
 
18
18
  #ifdef MRB_INT64
@@ -21,6 +21,8 @@
21
21
 
22
22
  #define MRB_FIXNUM_SHIFT 0
23
23
  #define MRB_SYMBOL_SHIFT 0
24
+ #define MRB_FIXNUM_MIN INT32_MIN
25
+ #define MRB_FIXNUM_MAX INT32_MAX
24
26
 
25
27
  /* value representation by nan-boxing:
26
28
  * float : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
@@ -31,75 +33,98 @@
31
33
  * in the right direction. Also, TTTTTT is the mrb_vtype + 1;
32
34
  */
33
35
  typedef struct mrb_value {
34
- union {
35
- mrb_float f;
36
- union {
37
- void *p;
38
- struct {
39
- MRB_ENDIAN_LOHI(
40
- uint32_t ttt;
41
- ,union {
42
- mrb_int i;
43
- mrb_sym sym;
44
- };
45
- )
46
- };
36
+ uint64_t u;
37
+ } mrb_value;
38
+
39
+ union mrb_value_ {
40
+ mrb_float f;
41
+ uint64_t u;
47
42
  #ifdef MRB_64BIT
48
- struct RCptr *vp;
43
+ void *p;
44
+ # define BOXNAN_IMMEDIATE_VALUE uint32_t i
45
+ #else
46
+ # define BOXNAN_IMMEDIATE_VALUE union { uint32_t i; void *p; }
49
47
  #endif
50
- } value;
48
+ struct {
49
+ MRB_ENDIAN_LOHI(
50
+ uint32_t ttt;
51
+ ,BOXNAN_IMMEDIATE_VALUE;
52
+ )
51
53
  };
52
- } mrb_value;
54
+ mrb_value value;
55
+ };
56
+
57
+ mrb_static_assert1(sizeof(mrb_value) == sizeof(union mrb_value_));
53
58
 
54
- #define mrb_float_pool(mrb,f) mrb_float_value(mrb,f)
59
+ static inline union mrb_value_
60
+ mrb_val_union(mrb_value v)
61
+ {
62
+ union mrb_value_ x;
63
+ x.value = v;
64
+ return x;
65
+ }
55
66
 
56
- #define mrb_tt(o) ((enum mrb_vtype)(((o).value.ttt & 0xfc000)>>14)-1)
57
- #define mrb_type(o) (enum mrb_vtype)((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT)
58
- #define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)((o).value.p)))<<2))
59
- #define mrb_float(o) (o).f
60
- #define mrb_fixnum(o) (o).value.i
61
- #define mrb_symbol(o) (o).value.sym
67
+ #define mrb_tt(o) ((enum mrb_vtype)((mrb_val_union(o).ttt & 0xfc000)>>14)-1)
68
+ #define mrb_type(o) (enum mrb_vtype)((uint32_t)0xfff00000 < mrb_val_union(o).ttt ? mrb_tt(o) : MRB_TT_FLOAT)
69
+ #define mrb_float(o) mrb_val_union(o).f
70
+ #define mrb_fixnum(o) ((mrb_int)mrb_val_union(o).i)
71
+ #define mrb_integer(o) mrb_fixnum(o)
72
+ #define mrb_symbol(o) ((mrb_sym)mrb_val_union(o).i)
62
73
 
63
74
  #ifdef MRB_64BIT
64
- MRB_API mrb_value mrb_nan_boxing_cptr_value(struct mrb_state*, void*);
75
+ #define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)(mrb_val_union(o).p)))<<2))
65
76
  #define mrb_cptr(o) (((struct RCptr*)mrb_ptr(o))->p)
66
77
  #define BOXNAN_SHIFT_LONG_POINTER(v) (((uintptr_t)(v)>>34)&0x3fff)
67
78
  #else
68
- #define mrb_cptr(o) ((o).value.p)
79
+ #define mrb_ptr(o) ((void*)mrb_val_union(o).i)
80
+ #define mrb_cptr(o) mrb_ptr(o)
69
81
  #define BOXNAN_SHIFT_LONG_POINTER(v) 0
70
82
  #endif
71
83
 
72
- #define BOXNAN_SET_VALUE(o, tt, attr, v) do {\
73
- (o).attr = (v);\
74
- (o).value.ttt = 0xfff00000 | (((tt)+1)<<14);\
84
+ #define BOXNAN_SET_VALUE(o, tt, attr, v) do { \
85
+ union mrb_value_ mrb_value_union_variable; \
86
+ mrb_value_union_variable.attr = (v);\
87
+ mrb_value_union_variable.ttt = 0xfff00000 | (((tt)+1)<<14);\
88
+ o = mrb_value_union_variable.value;\
75
89
  } while (0)
76
90
 
91
+ #ifdef MRB_64BIT
77
92
  #define BOXNAN_SET_OBJ_VALUE(o, tt, v) do {\
78
- (o).value.p = (void*)((uintptr_t)(v)>>2);\
79
- (o).value.ttt = (0xfff00000|(((tt)+1)<<14)|BOXNAN_SHIFT_LONG_POINTER(v));\
93
+ union mrb_value_ mrb_value_union_variable;\
94
+ mrb_value_union_variable.p = (void*)((uintptr_t)(v)>>2);\
95
+ mrb_value_union_variable.ttt = (0xfff00000|(((tt)+1)<<14)|BOXNAN_SHIFT_LONG_POINTER(v));\
96
+ o = mrb_value_union_variable.value;\
80
97
  } while (0)
98
+ #else
99
+ #define BOXNAN_SET_OBJ_VALUE(o, tt, v) BOXNAN_SET_VALUE(o, tt, i, (uint32_t)v)
100
+ #endif
81
101
 
82
102
  #define SET_FLOAT_VALUE(mrb,r,v) do { \
83
- if ((v) != (v)) { \
84
- (r).value.ttt = 0x7ff80000; \
85
- (r).value.i = 0; \
103
+ union mrb_value_ mrb_value_union_variable; \
104
+ if ((v) != (v)) { /* NaN */ \
105
+ mrb_value_union_variable.ttt = 0x7ff80000; \
106
+ mrb_value_union_variable.i = 0; \
86
107
  } \
87
108
  else { \
88
- (r).f = v; \
89
- }} while(0)
90
-
91
- #define SET_NIL_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 0)
92
- #define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
93
- #define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
94
- #define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
95
- #define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n))
96
- #define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
109
+ mrb_value_union_variable.f = (v); \
110
+ } \
111
+ r = mrb_value_union_variable.value; \
112
+ } while(0)
113
+
114
+ #define SET_NIL_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, i, 0)
115
+ #define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, i, 1)
116
+ #define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, i, 1)
117
+ #define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, i, 1)
118
+ #define SET_INT_VALUE(mrb, r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n))
119
+ #define SET_FIXNUM_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n))
120
+ #define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, i, (uint32_t)(v))
97
121
  #define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v))
98
122
  #ifdef MRB_64BIT
123
+ MRB_API mrb_value mrb_nan_boxing_cptr_value(struct mrb_state*, void*);
99
124
  #define SET_CPTR_VALUE(mrb,r,v) ((r) = mrb_nan_boxing_cptr_value(mrb, v))
100
125
  #else
101
- #define SET_CPTR_VALUE(mrb,r,v) BOXNAN_SET_VALUE(r, MRB_TT_CPTR, value.p, v)
126
+ #define SET_CPTR_VALUE(mrb,r,v) BOXNAN_SET_VALUE(r, MRB_TT_CPTR, p, v)
102
127
  #endif
103
- #define SET_UNDEF_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
128
+ #define SET_UNDEF_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_UNDEF, i, 0)
104
129
 
105
130
  #endif /* MRUBY_BOXING_NAN_H */
@@ -9,9 +9,11 @@
9
9
 
10
10
  #define MRB_FIXNUM_SHIFT 0
11
11
  #define MRB_SYMBOL_SHIFT 0
12
+ #define MRB_FIXNUM_MIN MRB_INT_MIN
13
+ #define MRB_FIXNUM_MAX MRB_INT_MAX
12
14
 
13
15
  union mrb_value_union {
14
- #ifndef MRB_WITHOUT_FLOAT
16
+ #ifndef MRB_NO_FLOAT
15
17
  mrb_float f;
16
18
  #endif
17
19
  void *p;
@@ -24,16 +26,13 @@ typedef struct mrb_value {
24
26
  enum mrb_vtype tt;
25
27
  } mrb_value;
26
28
 
27
- #ifndef MRB_WITHOUT_FLOAT
28
- #define mrb_float_pool(mrb,f) mrb_float_value(mrb,f)
29
- #endif
30
-
31
29
  #define mrb_ptr(o) (o).value.p
32
30
  #define mrb_cptr(o) mrb_ptr(o)
33
- #ifndef MRB_WITHOUT_FLOAT
31
+ #ifndef MRB_NO_FLOAT
34
32
  #define mrb_float(o) (o).value.f
35
33
  #endif
36
34
  #define mrb_fixnum(o) (o).value.i
35
+ #define mrb_integer(o) mrb_fixnum(o)
37
36
  #define mrb_symbol(o) (o).value.sym
38
37
  #define mrb_type(o) (o).tt
39
38
 
@@ -46,8 +45,9 @@ typedef struct mrb_value {
46
45
  #define SET_FALSE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
47
46
  #define SET_TRUE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
48
47
  #define SET_BOOL_VALUE(r,b) BOXNIX_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
49
- #define SET_INT_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n))
50
- #ifndef MRB_WITHOUT_FLOAT
48
+ #define SET_INT_VALUE(mrb,r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n))
49
+ #define SET_FIXNUM_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n))
50
+ #ifndef MRB_NO_FLOAT
51
51
  #define SET_FLOAT_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v))
52
52
  #endif
53
53
  #define SET_SYM_VALUE(r,v) BOXNIX_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
@@ -7,17 +7,18 @@
7
7
  #ifndef MRUBY_BOXING_WORD_H
8
8
  #define MRUBY_BOXING_WORD_H
9
9
 
10
- #if defined(MRB_INT64) && !defined(MRB_64BIT)
11
- #error MRB_INT64 cannot be used with MRB_WORD_BOXING in 32-bit mode.
12
- #endif
13
-
14
- #ifndef MRB_WITHOUT_FLOAT
10
+ #ifndef MRB_NO_FLOAT
15
11
  struct RFloat {
16
12
  MRB_OBJECT_HEADER;
17
13
  mrb_float f;
18
14
  };
19
15
  #endif
20
16
 
17
+ struct RInteger {
18
+ MRB_OBJECT_HEADER;
19
+ mrb_int i;
20
+ };
21
+
21
22
  enum mrb_special_consts {
22
23
  MRB_Qnil = 0,
23
24
  MRB_Qfalse = 4,
@@ -32,6 +33,14 @@ enum mrb_special_consts {
32
33
  #endif
33
34
  #define MRB_SYMBOL_SHIFT BOXWORD_SYMBOL_SHIFT
34
35
 
36
+ #if defined(MRB_64BIT) && defined(MRB_INT64)
37
+ # define MRB_FIXNUM_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT)
38
+ # define MRB_FIXNUM_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT)
39
+ #else
40
+ # define MRB_FIXNUM_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT)
41
+ # define MRB_FIXNUM_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT)
42
+ #endif
43
+
35
44
  #define BOXWORD_FIXNUM_BIT_POS 1
36
45
  #define BOXWORD_SYMBOL_BIT_POS 2
37
46
  #define BOXWORD_FIXNUM_SHIFT BOXWORD_FIXNUM_BIT_POS
@@ -46,14 +55,12 @@ enum mrb_special_consts {
46
55
  #define BOXWORD_SYMBOL_MASK ((1 << BOXWORD_SYMBOL_BIT_POS) - 1)
47
56
  #define BOXWORD_IMMEDIATE_MASK 0x07
48
57
 
49
- #define BOXWORD_SHIFT_VALUE(o,n,t) \
50
- (t)(((long)(o).w) >> BOXWORD_##n##_SHIFT)
51
58
  #define BOXWORD_SET_SHIFT_VALUE(o,n,v) \
52
- ((o).w = (((unsigned long)(v)) << BOXWORD_##n##_SHIFT) | BOXWORD_##n##_FLAG)
59
+ ((o).w = (((uintptr_t)(v)) << BOXWORD_##n##_SHIFT) | BOXWORD_##n##_FLAG)
53
60
  #define BOXWORD_SHIFT_VALUE_P(o,n) \
54
61
  (((o).w & BOXWORD_##n##_MASK) == BOXWORD_##n##_FLAG)
55
62
  #define BOXWORD_OBJ_TYPE_P(o,n) \
56
- (!mrb_immediate_p(o) && (o).value.bp->tt == MRB_TT_##n)
63
+ (!mrb_immediate_p(o) && mrb_val_union(o).bp->tt == MRB_TT_##n)
57
64
 
58
65
  /*
59
66
  * mrb_value representation:
@@ -66,54 +73,72 @@ enum mrb_special_consts {
66
73
  * symbol: ...SSSS SS10 (use only upper 32-bit as symbol value on 64-bit CPU)
67
74
  * object: ...PPPP P000 (any bits are 1)
68
75
  */
69
- typedef union mrb_value {
70
- union {
71
- void *p;
76
+ typedef struct mrb_value {
77
+ uintptr_t w;
78
+ } mrb_value;
79
+
80
+ union mrb_value_ {
81
+ void *p;
72
82
  #ifdef MRB_64BIT
73
- /* use struct to avoid bit shift. */
74
- struct {
75
- MRB_ENDIAN_LOHI(
76
- mrb_sym sym;
77
- ,uint32_t sym_flag;
78
- )
79
- };
83
+ /* use struct to avoid bit shift. */
84
+ struct {
85
+ MRB_ENDIAN_LOHI(
86
+ mrb_sym sym;
87
+ ,uint32_t sym_flag;
88
+ )
89
+ };
80
90
  #endif
81
- struct RBasic *bp;
82
- #ifndef MRB_WITHOUT_FLOAT
83
- struct RFloat *fp;
91
+ struct RBasic *bp;
92
+ #ifndef MRB_NO_FLOAT
93
+ struct RFloat *fp;
84
94
  #endif
85
- struct RCptr *vp;
86
- } value;
87
- unsigned long w;
88
- } mrb_value;
95
+ struct RInteger *ip;
96
+ struct RCptr *vp;
97
+ uintptr_t w;
98
+ mrb_value value;
99
+ };
100
+
101
+ mrb_static_assert1(sizeof(mrb_value) == sizeof(union mrb_value_));
102
+
103
+ static inline union mrb_value_
104
+ mrb_val_union(mrb_value v)
105
+ {
106
+ union mrb_value_ x;
107
+ x.value = v;
108
+ return x;
109
+ }
89
110
 
90
111
  MRB_API mrb_value mrb_word_boxing_cptr_value(struct mrb_state*, void*);
91
- #ifndef MRB_WITHOUT_FLOAT
112
+ #ifndef MRB_NO_FLOAT
92
113
  MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float);
93
- MRB_API mrb_value mrb_word_boxing_float_pool(struct mrb_state*, mrb_float);
94
114
  #endif
115
+ MRB_API mrb_value mrb_word_boxing_int_value(struct mrb_state*, mrb_int);
95
116
 
96
- #ifndef MRB_WITHOUT_FLOAT
97
- #define mrb_float_pool(mrb,f) mrb_word_boxing_float_pool(mrb,f)
98
- #endif
117
+ #define mrb_immediate_p(o) ((o).w & BOXWORD_IMMEDIATE_MASK || (o).w == MRB_Qnil)
99
118
 
100
- #define mrb_ptr(o) (o).value.p
101
- #define mrb_cptr(o) (o).value.vp->p
102
- #ifndef MRB_WITHOUT_FLOAT
103
- #define mrb_float(o) (o).value.fp->f
119
+ #define mrb_ptr(o) mrb_val_union(o).p
120
+ #define mrb_cptr(o) mrb_val_union(o).vp->p
121
+ #ifndef MRB_NO_FLOAT
122
+ #define mrb_float(o) mrb_val_union(o).fp->f
104
123
  #endif
105
- #define mrb_fixnum(o) BOXWORD_SHIFT_VALUE(o, FIXNUM, mrb_int)
124
+ #define mrb_fixnum(o) (mrb_int)(((intptr_t)(o).w) >> BOXWORD_FIXNUM_SHIFT)
125
+ MRB_INLINE mrb_int
126
+ mrb_integer_func(mrb_value o) {
127
+ if (mrb_immediate_p(o)) return mrb_fixnum(o);
128
+ return mrb_val_union(o).ip->i;
129
+ }
130
+ #define mrb_integer(o) mrb_integer_func(o)
106
131
  #ifdef MRB_64BIT
107
- #define mrb_symbol(o) (o).value.sym
132
+ #define mrb_symbol(o) mrb_val_union(o).sym
108
133
  #else
109
- #define mrb_symbol(o) BOXWORD_SHIFT_VALUE(o, SYMBOL, mrb_sym)
134
+ #define mrb_symbol(o) (mrb_sym)(((o).w) >> BOXWORD_SYMBOL_SHIFT)
110
135
  #endif
111
- #define mrb_bool(o) (((o).w & ~(unsigned long)MRB_Qfalse) != 0)
136
+ #define mrb_bool(o) (((o).w & ~(uintptr_t)MRB_Qfalse) != 0)
112
137
 
113
- #define mrb_immediate_p(o) ((o).w & BOXWORD_IMMEDIATE_MASK || (o).w == MRB_Qnil)
114
138
  #define mrb_fixnum_p(o) BOXWORD_SHIFT_VALUE_P(o, FIXNUM)
139
+ #define mrb_integer_p(o) (BOXWORD_SHIFT_VALUE_P(o, FIXNUM)||BOXWORD_OBJ_TYPE_P(o, INTEGER))
115
140
  #ifdef MRB_64BIT
116
- #define mrb_symbol_p(o) ((o).value.sym_flag == BOXWORD_SYMBOL_FLAG)
141
+ #define mrb_symbol_p(o) (mrb_val_union(o).sym_flag == BOXWORD_SYMBOL_FLAG)
117
142
  #else
118
143
  #define mrb_symbol_p(o) BOXWORD_SHIFT_VALUE_P(o, SYMBOL)
119
144
  #endif
@@ -121,7 +146,7 @@ MRB_API mrb_value mrb_word_boxing_float_pool(struct mrb_state*, mrb_float);
121
146
  #define mrb_nil_p(o) ((o).w == MRB_Qnil)
122
147
  #define mrb_false_p(o) ((o).w == MRB_Qfalse)
123
148
  #define mrb_true_p(o) ((o).w == MRB_Qtrue)
124
- #ifndef MRB_WITHOUT_FLOAT
149
+ #ifndef MRB_NO_FLOAT
125
150
  #define mrb_float_p(o) BOXWORD_OBJ_TYPE_P(o, FLOAT)
126
151
  #endif
127
152
  #define mrb_array_p(o) BOXWORD_OBJ_TYPE_P(o, ARRAY)
@@ -143,7 +168,7 @@ MRB_API mrb_value mrb_word_boxing_float_pool(struct mrb_state*, mrb_float);
143
168
  #define mrb_istruct_p(o) BOXWORD_OBJ_TYPE_P(o, ISTRUCT)
144
169
  #define mrb_break_p(o) BOXWORD_OBJ_TYPE_P(o, BREAK)
145
170
 
146
- #ifndef MRB_WITHOUT_FLOAT
171
+ #ifndef MRB_NO_FLOAT
147
172
  #define SET_FLOAT_VALUE(mrb,r,v) ((r) = mrb_word_boxing_float_value(mrb, v))
148
173
  #endif
149
174
  #define SET_CPTR_VALUE(mrb,r,v) ((r) = mrb_word_boxing_cptr_value(mrb, v))
@@ -152,23 +177,29 @@ MRB_API mrb_value mrb_word_boxing_float_pool(struct mrb_state*, mrb_float);
152
177
  #define SET_FALSE_VALUE(r) ((r).w = MRB_Qfalse)
153
178
  #define SET_TRUE_VALUE(r) ((r).w = MRB_Qtrue)
154
179
  #define SET_BOOL_VALUE(r,b) ((b) ? SET_TRUE_VALUE(r) : SET_FALSE_VALUE(r))
155
- #define SET_INT_VALUE(r,n) BOXWORD_SET_SHIFT_VALUE(r, FIXNUM, n)
180
+ #define SET_INT_VALUE(mrb,r,n) ((r) = mrb_word_boxing_int_value(mrb, n))
181
+ #define SET_FIXNUM_VALUE(r,n) BOXWORD_SET_SHIFT_VALUE(r, FIXNUM, n)
156
182
  #ifdef MRB_64BIT
157
- #define SET_SYM_VALUE(r,v) ((r).value.sym = v, (r).value.sym_flag = BOXWORD_SYMBOL_FLAG)
183
+ #define SET_SYM_VALUE(r,v) do {\
184
+ union mrb_value_ mrb_value_union_variable;\
185
+ mrb_value_union_variable.sym = v;\
186
+ mrb_value_union_variable.sym_flag = BOXWORD_SYMBOL_FLAG;\
187
+ (r) = mrb_value_union_variable.value;\
188
+ } while (0)
158
189
  #else
159
190
  #define SET_SYM_VALUE(r,n) BOXWORD_SET_SHIFT_VALUE(r, SYMBOL, n)
160
191
  #endif
161
- #define SET_OBJ_VALUE(r,v) ((r).value.p = v)
192
+ #define SET_OBJ_VALUE(r,v) ((r).w = (uintptr_t)(v))
162
193
 
163
194
  MRB_INLINE enum mrb_vtype
164
195
  mrb_type(mrb_value o)
165
196
  {
166
197
  return !mrb_bool(o) ? MRB_TT_FALSE :
167
198
  mrb_true_p(o) ? MRB_TT_TRUE :
168
- mrb_fixnum_p(o) ? MRB_TT_FIXNUM :
199
+ mrb_fixnum_p(o) ? MRB_TT_INTEGER :
169
200
  mrb_symbol_p(o) ? MRB_TT_SYMBOL :
170
201
  mrb_undef_p(o) ? MRB_TT_UNDEF :
171
- o.value.bp->tt;
202
+ mrb_val_union(o).bp->tt;
172
203
  }
173
204
 
174
205
  #endif /* MRUBY_BOXING_WORD_H */