script_core 0.2.7 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -18,7 +18,7 @@ enum_update_hash(mrb_state *mrb, mrb_value self)
18
18
  mrb_get_args(mrb, "iii", &hash, &index, &hv);
19
19
  hash ^= ((uint32_t)hv << (index % 16));
20
20
 
21
- return mrb_fixnum_value(hash);
21
+ return mrb_int_value(mrb, hash);
22
22
  }
23
23
 
24
24
  void
@@ -16,6 +16,7 @@
16
16
  #include <mruby/error.h>
17
17
  #include <mruby/class.h>
18
18
  #include <mruby/throw.h>
19
+ #include <mruby/presym.h>
19
20
 
20
21
  MRB_API mrb_value
21
22
  mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, size_t len)
@@ -45,7 +46,7 @@ exc_initialize(mrb_state *mrb, mrb_value exc)
45
46
  mrb_value mesg;
46
47
 
47
48
  if (mrb_get_args(mrb, "|o", &mesg) == 1) {
48
- mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), mesg);
49
+ mrb_iv_set(mrb, exc, MRB_SYM(mesg), mesg);
49
50
  }
50
51
  return exc;
51
52
  }
@@ -74,7 +75,7 @@ exc_exception(mrb_state *mrb, mrb_value self)
74
75
  if (argc == 0) return self;
75
76
  if (mrb_obj_equal(mrb, self, a)) return self;
76
77
  exc = mrb_obj_clone(mrb, self);
77
- mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), a);
78
+ mrb_iv_set(mrb, exc, MRB_SYM(mesg), a);
78
79
 
79
80
  return exc;
80
81
  }
@@ -90,7 +91,7 @@ exc_exception(mrb_state *mrb, mrb_value self)
90
91
  mrb_value
91
92
  exc_to_s(mrb_state *mrb, mrb_value exc)
92
93
  {
93
- mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
94
+ mrb_value mesg = mrb_attr_get(mrb, exc, MRB_SYM(mesg));
94
95
  struct RObject *p;
95
96
 
96
97
  if (!mrb_string_p(mesg)) {
@@ -114,7 +115,7 @@ exc_to_s(mrb_state *mrb, mrb_value exc)
114
115
  static mrb_value
115
116
  exc_message(mrb_state *mrb, mrb_value exc)
116
117
  {
117
- return mrb_funcall(mrb, exc, "to_s", 0);
118
+ return mrb_funcall_id(mrb, exc, MRB_SYM(to_s), 0);
118
119
  }
119
120
 
120
121
  /*
@@ -130,7 +131,7 @@ exc_message(mrb_state *mrb, mrb_value exc)
130
131
  mrb_value
131
132
  mrb_exc_inspect(mrb_state *mrb, mrb_value exc)
132
133
  {
133
- mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
134
+ mrb_value mesg = mrb_attr_get(mrb, exc, MRB_SYM(mesg));
134
135
  mrb_value cname = mrb_mod_to_s(mrb, mrb_obj_value(mrb_obj_class(mrb, exc)));
135
136
  mesg = mrb_obj_as_string(mrb, mesg);
136
137
  return RSTRING_LEN(mesg) == 0 ? cname : mrb_format(mrb, "%v (%v)", mesg, cname);
@@ -154,7 +155,7 @@ set_backtrace(mrb_state *mrb, mrb_value exc, mrb_value backtrace)
154
155
  p++;
155
156
  }
156
157
  }
157
- mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "backtrace"), backtrace);
158
+ mrb_iv_set(mrb, exc, MRB_SYM(backtrace), backtrace);
158
159
  }
159
160
 
160
161
  static mrb_value
@@ -288,7 +289,7 @@ mrb_vformat(mrb_state *mrb, const char *format, va_list ap)
288
289
  #endif
289
290
  obj = mrb_fixnum_value(i);
290
291
  goto L_cat_obj;
291
- #ifndef MRB_WITHOUT_FLOAT
292
+ #ifndef MRB_NO_FLOAT
292
293
  case 'f':
293
294
  obj = mrb_float_value(mrb, (mrb_float)va_arg(ap, double));
294
295
  goto L_cat_obj;
@@ -420,7 +421,7 @@ mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
420
421
  MRB_API void
421
422
  mrb_warn(mrb_state *mrb, const char *fmt, ...)
422
423
  {
423
- #ifndef MRB_DISABLE_STDIO
424
+ #ifndef MRB_NO_STDIO
424
425
  va_list ap;
425
426
  mrb_value str;
426
427
 
@@ -436,7 +437,7 @@ mrb_warn(mrb_state *mrb, const char *fmt, ...)
436
437
  MRB_API mrb_noreturn void
437
438
  mrb_bug(mrb_state *mrb, const char *fmt, ...)
438
439
  {
439
- #ifndef MRB_DISABLE_STDIO
440
+ #ifndef MRB_NO_STDIO
440
441
  va_list ap;
441
442
  mrb_value str;
442
443
 
@@ -474,7 +475,7 @@ mrb_make_exception(mrb_state *mrb, mrb_int argc, const mrb_value *argv)
474
475
  n = 1;
475
476
  exception_call:
476
477
  {
477
- mrb_sym exc = mrb_intern_lit(mrb, "exception");
478
+ mrb_sym exc = MRB_SYM(exception);
478
479
  if (mrb_respond_to(mrb, argv[0], exc)) {
479
480
  mesg = mrb_funcall_argv(mrb, argv[0], exc, n, argv+1);
480
481
  }
@@ -590,6 +591,28 @@ mrb_core_init_abort(mrb_state *mrb)
590
591
  exc_throw(mrb, mrb_nil_value());
591
592
  }
592
593
 
594
+ void
595
+ mrb_protect_atexit(mrb_state *mrb)
596
+ {
597
+ if (mrb->atexit_stack_len > 0) {
598
+ struct mrb_jmpbuf *prev_jmp = mrb->jmp;
599
+ struct mrb_jmpbuf c_jmp;
600
+ for (int i = mrb->atexit_stack_len; i > 0; --i) {
601
+ MRB_TRY(&c_jmp) {
602
+ mrb->jmp = &c_jmp;
603
+ mrb->atexit_stack[i - 1](mrb);
604
+ mrb->jmp = prev_jmp;
605
+ } MRB_CATCH(&c_jmp) {
606
+ /* ignore atexit errors */
607
+ } MRB_END_EXC(&c_jmp);
608
+ }
609
+ #ifndef MRB_FIXED_STATE_ATEXIT_STACK
610
+ mrb_free(mrb, mrb->atexit_stack);
611
+ #endif
612
+ mrb->jmp = prev_jmp;
613
+ }
614
+ }
615
+
593
616
  mrb_noreturn void
594
617
  mrb_raise_nomemory(mrb_state *mrb)
595
618
  {
@@ -622,11 +645,11 @@ mrb_init_exception(mrb_state *mrb)
622
645
  script_error = mrb_define_class(mrb, "ScriptError", mrb->eException_class); /* 15.2.37 */
623
646
  mrb_define_class(mrb, "SyntaxError", script_error); /* 15.2.38 */
624
647
  stack_error = mrb_define_class(mrb, "SystemStackError", exception);
625
- mrb->stack_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, stack_error, "stack level too deep"));
648
+ mrb->stack_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, stack_error, "stack level too deep"));
626
649
 
627
650
  nomem_error = mrb_define_class(mrb, "NoMemoryError", exception);
628
- mrb->nomem_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, nomem_error, "Out of memory"));
651
+ mrb->nomem_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "Out of memory"));
629
652
  #ifdef MRB_GC_FIXED_ARENA
630
- mrb->arena_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, nomem_error, "arena overflow error"));
653
+ mrb->arena_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "arena overflow error"));
631
654
  #endif
632
655
  }
@@ -8,6 +8,7 @@
8
8
  #include <mruby/string.h>
9
9
  #include <mruby/data.h>
10
10
  #include <mruby/class.h>
11
+ #include <mruby/numeric.h>
11
12
 
12
13
  MRB_API struct RData*
13
14
  mrb_data_object_alloc(mrb_state *mrb, struct RClass *klass, void *ptr, const mrb_data_type *type)
@@ -69,21 +70,11 @@ mrb_obj_to_sym(mrb_state *mrb, mrb_value name)
69
70
  return 0; /* not reached */
70
71
  }
71
72
 
72
- MRB_API mrb_int
73
- #ifdef MRB_WITHOUT_FLOAT
74
- mrb_fixnum_id(mrb_int f)
75
- #else
76
- mrb_float_id(mrb_float f)
77
- #endif
73
+ static mrb_int
74
+ make_num_id(const char *p, size_t len)
78
75
  {
79
- const char *p = (const char*)&f;
80
- int len = sizeof(f);
81
76
  uint32_t id = 0;
82
77
 
83
- #ifndef MRB_WITHOUT_FLOAT
84
- /* normalize -0.0 to 0.0 */
85
- if (f == 0) f = 0.0;
86
- #endif
87
78
  while (len--) {
88
79
  id = id*65599 + *p;
89
80
  p++;
@@ -93,6 +84,22 @@ mrb_float_id(mrb_float f)
93
84
  return (mrb_int)id;
94
85
  }
95
86
 
87
+ MRB_API mrb_int
88
+ mrb_int_id(mrb_int n)
89
+ {
90
+ return make_num_id((const char*)&n, sizeof(n));
91
+ }
92
+
93
+ #ifndef MRB_NO_FLOAT
94
+ MRB_API mrb_int
95
+ mrb_float_id(mrb_float f)
96
+ {
97
+ /* normalize -0.0 to 0.0 */
98
+ if (f == 0) f = 0.0;
99
+ return make_num_id((const char*)&f, sizeof(f));
100
+ }
101
+ #endif
102
+
96
103
  MRB_API mrb_int
97
104
  mrb_obj_id(mrb_value obj)
98
105
  {
@@ -107,17 +114,16 @@ mrb_obj_id(mrb_value obj)
107
114
  return MakeID(0); /* not define */
108
115
  case MRB_TT_FALSE:
109
116
  if (mrb_nil_p(obj))
110
- return MakeID(1);
111
- return MakeID(0);
117
+ return MakeID(4);
118
+ else
119
+ return MakeID(0);
112
120
  case MRB_TT_TRUE:
113
- return MakeID(1);
121
+ return MakeID(2);
114
122
  case MRB_TT_SYMBOL:
115
123
  return MakeID(mrb_symbol(obj));
116
- case MRB_TT_FIXNUM:
117
- #ifdef MRB_WITHOUT_FLOAT
118
- return MakeID(mrb_fixnum_id(mrb_fixnum(obj)));
119
- #else
120
- return MakeID2(mrb_float_id((mrb_float)mrb_fixnum(obj)), MRB_TT_FLOAT);
124
+ case MRB_TT_INTEGER:
125
+ return MakeID(mrb_int_id(mrb_integer(obj)));
126
+ #ifndef MRB_NO_FLOAT
121
127
  case MRB_TT_FLOAT:
122
128
  return MakeID(mrb_float_id(mrb_float(obj)));
123
129
  #endif
@@ -146,29 +152,32 @@ mrb_obj_id(mrb_value obj)
146
152
  #ifdef MRB_WORD_BOXING
147
153
  #define mrb_xxx_boxing_cptr_value mrb_word_boxing_cptr_value
148
154
 
149
- #ifndef MRB_WITHOUT_FLOAT
155
+ #ifndef MRB_NO_FLOAT
150
156
  MRB_API mrb_value
151
157
  mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f)
152
158
  {
153
- mrb_value v;
159
+ union mrb_value_ v;
154
160
 
155
- v.value.p = mrb_obj_alloc(mrb, MRB_TT_FLOAT, mrb->float_class);
156
- v.value.fp->f = f;
157
- MRB_SET_FROZEN_FLAG(v.value.bp);
158
- return v;
161
+ v.p = mrb_obj_alloc(mrb, MRB_TT_FLOAT, mrb->float_class);
162
+ v.fp->f = f;
163
+ MRB_SET_FROZEN_FLAG(v.bp);
164
+ return v.value;
159
165
  }
166
+ #endif /* MRB_NO_FLOAT */
160
167
 
161
168
  MRB_API mrb_value
162
- mrb_word_boxing_float_pool(mrb_state *mrb, mrb_float f)
169
+ mrb_word_boxing_int_value(mrb_state *mrb, mrb_int n)
163
170
  {
164
- struct RFloat *nf = (struct RFloat *)mrb_malloc(mrb, sizeof(struct RFloat));
165
- nf->tt = MRB_TT_FLOAT;
166
- nf->c = mrb->float_class;
167
- nf->f = f;
168
- MRB_SET_FROZEN_FLAG(nf);
169
- return mrb_obj_value(nf);
171
+ if (FIXABLE(n)) return mrb_fixnum_value(n);
172
+ else {
173
+ union mrb_value_ v;
174
+
175
+ v.p = mrb_obj_alloc(mrb, MRB_TT_INTEGER, mrb->integer_class);
176
+ v.ip->i = n;
177
+ MRB_SET_FROZEN_FLAG(v.ip);
178
+ return v.value;
179
+ }
170
180
  }
171
- #endif /* MRB_WITHOUT_FLOAT */
172
181
  #endif /* MRB_WORD_BOXING */
173
182
 
174
183
  #if defined(MRB_WORD_BOXING) || (defined(MRB_NAN_BOXING) && defined(MRB_64BIT))
@@ -1,5 +1,6 @@
1
- #ifndef MRB_WITHOUT_FLOAT
2
- #if defined(MRB_DISABLE_STDIO) || defined(_WIN32) || defined(_WIN64)
1
+ #include <mruby.h>
2
+ #if !defined(MRB_NO_FLOAT)
3
+ #if defined(MRB_NO_STDIO) || defined(_WIN32) || defined(_WIN64)
3
4
  /*
4
5
 
5
6
  Most code in this file originates from musl (src/stdio/vfprintf.c)
@@ -34,7 +35,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34
35
  #include <float.h>
35
36
  #include <ctype.h>
36
37
 
37
- #include <mruby.h>
38
38
  #include <mruby/string.h>
39
39
 
40
40
  struct fmt_args;
@@ -442,8 +442,7 @@ mrb_float_to_cstr(mrb_state *mrb, char *buf, size_t len, const char *fmt, mrb_fl
442
442
  *cstr.buf = '\0';
443
443
  return (int)(cstr.buf - buf);
444
444
  }
445
- #else /* MRB_DISABLE_STDIO || _WIN32 || _WIN64 */
446
- #include <mruby.h>
445
+ #else /* MRB_NO_STDIO || _WIN32 || _WIN64 */
447
446
  #include <stdio.h>
448
447
 
449
448
  MRB_API mrb_value
@@ -460,5 +459,5 @@ mrb_float_to_cstr(mrb_state *mrb, char *buf, size_t len, const char *fmt, mrb_fl
460
459
  {
461
460
  return snprintf(buf, len, fmt, fval);
462
461
  }
463
- #endif /* MRB_DISABLE_STDIO || _WIN32 || _WIN64 */
462
+ #endif /* MRB_NO_STDIO || _WIN32 || _WIN64 */
464
463
  #endif
@@ -6,6 +6,9 @@
6
6
 
7
7
  #include <string.h>
8
8
  #include <stdlib.h>
9
+ #ifdef MRB_USE_MALLOC_TRIM
10
+ #include <malloc.h>
11
+ #endif
9
12
  #include <mruby.h>
10
13
  #include <mruby/array.h>
11
14
  #include <mruby/class.h>
@@ -19,6 +22,7 @@
19
22
  #include <mruby/gc.h>
20
23
  #include <mruby/error.h>
21
24
  #include <mruby/throw.h>
25
+ #include <mruby/presym.h>
22
26
 
23
27
  /*
24
28
  = Tri-color Incremental Garbage Collection
@@ -35,9 +39,14 @@
35
39
  * Gray - Marked, But the child objects are unmarked.
36
40
  * Black - Marked, the child objects are also marked.
37
41
 
42
+ Extra color
43
+
44
+ * Red - Static (ROM object) no need to be collected.
45
+ - All child objects should be Red as well.
46
+
38
47
  == Two White Types
39
48
 
40
- There're two white color types in a flip-flop fashion: White-A and White-B,
49
+ There are two white color types in a flip-flop fashion: White-A and White-B,
41
50
  which respectively represent the Current White color (the newly allocated
42
51
  objects in the current GC cycle) and the Sweep Target White color (the
43
52
  dead objects to be swept).
@@ -99,8 +108,14 @@ struct free_obj {
99
108
  struct RBasic *next;
100
109
  };
101
110
 
111
+ struct RVALUE_initializer {
112
+ MRB_OBJECT_HEADER;
113
+ char padding[sizeof(void*) * 4 - sizeof(uint32_t)];
114
+ };
115
+
102
116
  typedef struct {
103
117
  union {
118
+ struct RVALUE_initializer init; /* must be first member to ensure initialization */
104
119
  struct free_obj free;
105
120
  struct RBasic basic;
106
121
  struct RObject object;
@@ -117,7 +132,7 @@ typedef struct {
117
132
  struct RException exc;
118
133
  struct RBreak brk;
119
134
  #ifdef MRB_WORD_BOXING
120
- #ifndef MRB_WITHOUT_FLOAT
135
+ #ifndef MRB_NO_FLOAT
121
136
  struct RFloat floatv;
122
137
  #endif
123
138
  struct RCptr cptr;
@@ -185,6 +200,7 @@ gettimeofday_time(void)
185
200
  #define GC_WHITE_A 1
186
201
  #define GC_WHITE_B (1 << 1)
187
202
  #define GC_BLACK (1 << 2)
203
+ #define GC_RED 7
188
204
  #define GC_WHITES (GC_WHITE_A | GC_WHITE_B)
189
205
  #define GC_COLOR_MASK 7
190
206
 
@@ -194,7 +210,8 @@ gettimeofday_time(void)
194
210
  #define paint_partial_white(s, o) ((o)->color = (s)->current_white_part)
195
211
  #define is_gray(o) ((o)->color == GC_GRAY)
196
212
  #define is_white(o) ((o)->color & GC_WHITES)
197
- #define is_black(o) ((o)->color & GC_BLACK)
213
+ #define is_black(o) ((o)->color == GC_BLACK)
214
+ #define is_red(o) ((o)->color == GC_RED)
198
215
  #define flip_white_part(s) ((s)->current_white_part = other_white_part(s))
199
216
  #define other_white_part(s) ((s)->current_white_part ^ GC_WHITES)
200
217
  #define is_dead(s, o) (((o)->color & other_white_part(s) & GC_WHITES) || (o)->tt == MRB_TT_FREE)
@@ -225,14 +242,8 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len)
225
242
  p2 = mrb_realloc_simple(mrb, p, len);
226
243
  if (len == 0) return p2;
227
244
  if (p2 == NULL) {
228
- if (mrb->gc.out_of_memory) {
229
- mrb_raise_nomemory(mrb);
230
- /* mrb_panic(mrb); */
231
- }
232
- else {
233
- mrb->gc.out_of_memory = TRUE;
234
- mrb_raise_nomemory(mrb);
235
- }
245
+ mrb->gc.out_of_memory = TRUE;
246
+ mrb_raise_nomemory(mrb);
236
247
  }
237
248
  else {
238
249
  mrb->gc.out_of_memory = FALSE;
@@ -463,7 +474,7 @@ mrb_gc_protect(mrb_state *mrb, mrb_value obj)
463
474
  gc_protect(mrb, &mrb->gc, mrb_basic_ptr(obj));
464
475
  }
465
476
 
466
- #define GC_ROOT_NAME "_gc_root_"
477
+ #define GC_ROOT_SYM MRB_SYM(_gc_root_)
467
478
 
468
479
  /* mrb_gc_register() keeps the object from GC.
469
480
 
@@ -480,7 +491,7 @@ mrb_gc_register(mrb_state *mrb, mrb_value obj)
480
491
  mrb_value table;
481
492
 
482
493
  if (mrb_immediate_p(obj)) return;
483
- root = mrb_intern_lit(mrb, GC_ROOT_NAME);
494
+ root = GC_ROOT_SYM;
484
495
  table = mrb_gv_get(mrb, root);
485
496
  if (mrb_nil_p(table) || !mrb_array_p(table)) {
486
497
  table = mrb_ary_new(mrb);
@@ -499,7 +510,7 @@ mrb_gc_unregister(mrb_state *mrb, mrb_value obj)
499
510
  mrb_int i;
500
511
 
501
512
  if (mrb_immediate_p(obj)) return;
502
- root = mrb_intern_lit(mrb, GC_ROOT_NAME);
513
+ root = GC_ROOT_SYM;
503
514
  table = mrb_gv_get(mrb, root);
504
515
  if (mrb_nil_p(table)) return;
505
516
  if (!mrb_array_p(table)) {
@@ -587,11 +598,11 @@ add_gray_list(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
587
598
  gc->gray_list = obj;
588
599
  }
589
600
 
590
- static int
601
+ static mrb_int
591
602
  ci_nregs(mrb_callinfo *ci)
592
603
  {
593
- struct RProc *p = ci->proc;
594
- int n = 0;
604
+ const struct RProc *p = ci->proc;
605
+ mrb_int n = 0;
595
606
 
596
607
  if (!p) {
597
608
  if (ci->argc < 0) return 3;
@@ -616,11 +627,14 @@ mark_context_stack(mrb_state *mrb, struct mrb_context *c)
616
627
  size_t e;
617
628
  mrb_value nil;
618
629
 
619
- if (c->stack == NULL) return;
620
- e = c->stack - c->stbase;
630
+ if (c->stbase == NULL) return;
621
631
  if (c->ci) {
632
+ e = (c->ci->stack ? c->ci->stack - c->stbase : 0);
622
633
  e += ci_nregs(c->ci);
623
634
  }
635
+ else {
636
+ e = 0;
637
+ }
624
638
  if (c->stbase + e > c->stend) e = c->stend - c->stbase;
625
639
  for (i=0; i<e; i++) {
626
640
  mrb_value v = c->stbase[i];
@@ -639,7 +653,6 @@ mark_context_stack(mrb_state *mrb, struct mrb_context *c)
639
653
  static void
640
654
  mark_context(mrb_state *mrb, struct mrb_context *c)
641
655
  {
642
- int i;
643
656
  mrb_callinfo *ci;
644
657
 
645
658
  start:
@@ -651,15 +664,10 @@ mark_context(mrb_state *mrb, struct mrb_context *c)
651
664
  /* mark call stack */
652
665
  if (c->cibase) {
653
666
  for (ci = c->cibase; ci <= c->ci; ci++) {
654
- mrb_gc_mark(mrb, (struct RBasic*)ci->env);
655
667
  mrb_gc_mark(mrb, (struct RBasic*)ci->proc);
656
- mrb_gc_mark(mrb, (struct RBasic*)ci->target_class);
668
+ mrb_gc_mark(mrb, (struct RBasic*)ci->u.target_class);
657
669
  }
658
670
  }
659
- /* mark ensure stack */
660
- for (i=0; i<c->eidx; i++) {
661
- mrb_gc_mark(mrb, (struct RBasic*)c->ensure[i]);
662
- }
663
671
  /* mark fibers */
664
672
  mrb_gc_mark(mrb, (struct RBasic*)c->fib);
665
673
  if (c->prev) {
@@ -673,7 +681,6 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
673
681
  {
674
682
  mrb_assert(is_gray(obj));
675
683
  paint_black(obj);
676
- gc->gray_list = obj->gcnext;
677
684
  mrb_gc_mark(mrb, (struct RBasic*)obj->c);
678
685
  switch (obj->tt) {
679
686
  case MRB_TT_ICLASS:
@@ -737,10 +744,11 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
737
744
  case MRB_TT_ARRAY:
738
745
  {
739
746
  struct RArray *a = (struct RArray*)obj;
740
- size_t i, e;
747
+ size_t i, e=ARY_LEN(a);
748
+ mrb_value *p = ARY_PTR(a);
741
749
 
742
- for (i=0,e=ARY_LEN(a); i<e; i++) {
743
- mrb_gc_mark_value(mrb, ARY_PTR(a)[i]);
750
+ for (i=0; i<e; i++) {
751
+ mrb_gc_mark_value(mrb, p[i]);
744
752
  }
745
753
  }
746
754
  break;
@@ -761,6 +769,14 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
761
769
  mrb_gc_mark_range(mrb, (struct RRange*)obj);
762
770
  break;
763
771
 
772
+ case MRB_TT_BREAK:
773
+ {
774
+ struct RBreak *brk = (struct RBreak*)obj;
775
+ mrb_gc_mark(mrb, (struct RBasic*)mrb_break_proc_get(brk));
776
+ mrb_gc_mark_value(mrb, mrb_break_value_get(brk));
777
+ }
778
+ break;
779
+
764
780
  default:
765
781
  break;
766
782
  }
@@ -771,6 +787,7 @@ mrb_gc_mark(mrb_state *mrb, struct RBasic *obj)
771
787
  {
772
788
  if (obj == 0) return;
773
789
  if (!is_white(obj)) return;
790
+ if (is_red(obj)) return;
774
791
  mrb_assert((obj)->tt != MRB_TT_FREE);
775
792
  add_gray_list(mrb, &mrb->gc, obj);
776
793
  }
@@ -780,22 +797,6 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
780
797
  {
781
798
  DEBUG(fprintf(stderr, "obj_free(%p,tt=%d)\n",obj,obj->tt));
782
799
  switch (obj->tt) {
783
- /* immediate - no mark */
784
- case MRB_TT_TRUE:
785
- case MRB_TT_FIXNUM:
786
- case MRB_TT_SYMBOL:
787
- /* cannot happen */
788
- return;
789
-
790
- #ifndef MRB_WITHOUT_FLOAT
791
- case MRB_TT_FLOAT:
792
- #ifdef MRB_WORD_BOXING
793
- break;
794
- #else
795
- return;
796
- #endif
797
- #endif
798
-
799
800
  case MRB_TT_OBJECT:
800
801
  mrb_gc_free_iv(mrb, (struct RObject*)obj);
801
802
  break;
@@ -809,12 +810,14 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
809
810
  case MRB_TT_SCLASS:
810
811
  mrb_gc_free_mt(mrb, (struct RClass*)obj);
811
812
  mrb_gc_free_iv(mrb, (struct RObject*)obj);
812
- mrb_mc_clear_by_class(mrb, (struct RClass*)obj);
813
+ if (!end)
814
+ mrb_mc_clear_by_class(mrb, (struct RClass*)obj);
813
815
  break;
814
816
  case MRB_TT_ICLASS:
815
817
  if (MRB_FLAG_TEST(obj, MRB_FL_CLASS_IS_ORIGIN))
816
818
  mrb_gc_free_mt(mrb, (struct RClass*)obj);
817
- mrb_mc_clear_by_class(mrb, (struct RClass*)obj);
819
+ if (!end)
820
+ mrb_mc_clear_by_class(mrb, (struct RClass*)obj);
818
821
  break;
819
822
  case MRB_TT_ENV:
820
823
  {
@@ -840,7 +843,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
840
843
  mrb_callinfo *ce = c->cibase;
841
844
 
842
845
  while (ce <= ci) {
843
- struct REnv *e = ci->env;
846
+ struct REnv *e = ci->u.env;
844
847
  if (e && !mrb_object_dead_p(mrb, (struct RBasic*)e) &&
845
848
  e->tt == MRB_TT_ENV && MRB_ENV_ONSTACK_P(e)) {
846
849
  mrb_env_unshare(mrb, e);
@@ -874,7 +877,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end)
874
877
  struct RProc *p = (struct RProc*)obj;
875
878
 
876
879
  if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
877
- mrb_irep *irep = p->body.irep;
880
+ mrb_irep *irep = (mrb_irep*)p->body.irep;
878
881
  if (end) {
879
882
  mrb_irep_cutref(mrb, irep);
880
883
  }
@@ -930,10 +933,10 @@ root_scan_phase(mrb_state *mrb, mrb_gc *gc)
930
933
  mrb_gc_mark(mrb, (struct RBasic*)mrb->hash_class);
931
934
  mrb_gc_mark(mrb, (struct RBasic*)mrb->range_class);
932
935
 
933
- #ifndef MRB_WITHOUT_FLOAT
936
+ #ifndef MRB_NO_FLOAT
934
937
  mrb_gc_mark(mrb, (struct RBasic*)mrb->float_class);
935
938
  #endif
936
- mrb_gc_mark(mrb, (struct RBasic*)mrb->fixnum_class);
939
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->integer_class);
937
940
  mrb_gc_mark(mrb, (struct RBasic*)mrb->true_class);
938
941
  mrb_gc_mark(mrb, (struct RBasic*)mrb->false_class);
939
942
  mrb_gc_mark(mrb, (struct RBasic*)mrb->nil_class);
@@ -1002,7 +1005,7 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
1002
1005
  if (!c || c->status == MRB_FIBER_TERMINATED) break;
1003
1006
 
1004
1007
  /* mark stack */
1005
- i = c->stack - c->stbase;
1008
+ i = c->ci->stack - c->stbase;
1006
1009
 
1007
1010
  if (c->ci) {
1008
1011
  i += ci_nregs(c->ci);
@@ -1010,9 +1013,6 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
1010
1013
  if (c->stbase + i > c->stend) i = c->stend - c->stbase;
1011
1014
  children += i;
1012
1015
 
1013
- /* mark ensure stack */
1014
- children += c->eidx;
1015
-
1016
1016
  /* mark closure */
1017
1017
  if (c->cibase) {
1018
1018
  for (i=0, ci = c->cibase; ci <= c->ci; i++, ci++)
@@ -1036,6 +1036,7 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
1036
1036
 
1037
1037
  case MRB_TT_PROC:
1038
1038
  case MRB_TT_RANGE:
1039
+ case MRB_TT_BREAK:
1039
1040
  children+=2;
1040
1041
  break;
1041
1042
 
@@ -1049,10 +1050,9 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
1049
1050
  static void
1050
1051
  gc_mark_gray_list(mrb_state *mrb, mrb_gc *gc) {
1051
1052
  while (gc->gray_list) {
1052
- if (is_gray(gc->gray_list))
1053
- gc_mark_children(mrb, gc, gc->gray_list);
1054
- else
1055
- gc->gray_list = gc->gray_list->gcnext;
1053
+ struct RBasic *obj = gc->gray_list;
1054
+ gc->gray_list = obj->gcnext;
1055
+ gc_mark_children(mrb, gc, obj);
1056
1056
  }
1057
1057
  }
1058
1058
 
@@ -1064,6 +1064,7 @@ incremental_marking_phase(mrb_state *mrb, mrb_gc *gc, size_t limit)
1064
1064
 
1065
1065
  while (gc->gray_list && tried_marks < limit) {
1066
1066
  struct RBasic *obj = gc->gray_list;
1067
+ gc->gray_list = obj->gcnext;
1067
1068
  gc_mark_children(mrb, gc, obj);
1068
1069
  tried_marks += gc_gray_counts(mrb, gc, obj);
1069
1070
  }
@@ -1082,7 +1083,9 @@ final_marking_phase(mrb_state *mrb, mrb_gc *gc)
1082
1083
  }
1083
1084
  mrb_gc_mark_gv(mrb);
1084
1085
  mark_context(mrb, mrb->c);
1085
- mark_context(mrb, mrb->root_c);
1086
+ if (mrb->c != mrb->root_c) {
1087
+ mark_context(mrb, mrb->root_c);
1088
+ }
1086
1089
  mrb_gc_mark(mrb, (struct RBasic*)mrb->exc);
1087
1090
  gc_mark_gray_list(mrb, gc);
1088
1091
  mrb_assert(gc->gray_list == NULL);
@@ -1321,6 +1324,9 @@ mrb_full_gc(mrb_state *mrb)
1321
1324
  gc->full = FALSE;
1322
1325
  }
1323
1326
 
1327
+ #ifdef MRB_USE_MALLOC_TRIM
1328
+ malloc_trim(0);
1329
+ #endif
1324
1330
  GC_TIME_STOP_AND_REPORT;
1325
1331
  }
1326
1332
 
@@ -1605,11 +1611,12 @@ mrb_objspace_each_objects(mrb_state *mrb, mrb_each_object_callback *callback, vo
1605
1611
  }
1606
1612
  }
1607
1613
 
1608
- #ifdef GC_TEST
1609
- #ifdef GC_DEBUG
1610
- static mrb_value gc_test(mrb_state *, mrb_value);
1611
- #endif
1612
- #endif
1614
+ size_t
1615
+ mrb_objspace_page_slot_size(void)
1616
+ {
1617
+ return sizeof(RVALUE);
1618
+ }
1619
+
1613
1620
 
1614
1621
  void
1615
1622
  mrb_init_gc(mrb_state *mrb)
@@ -1630,9 +1637,4 @@ mrb_init_gc(mrb_state *mrb)
1630
1637
  mrb_define_class_method(mrb, gc, "step_ratio=", gc_step_ratio_set, MRB_ARGS_REQ(1));
1631
1638
  mrb_define_class_method(mrb, gc, "generational_mode=", gc_generational_mode_set, MRB_ARGS_REQ(1));
1632
1639
  mrb_define_class_method(mrb, gc, "generational_mode", gc_generational_mode_get, MRB_ARGS_NONE());
1633
- #ifdef GC_TEST
1634
- #ifdef GC_DEBUG
1635
- mrb_define_class_method(mrb, gc, "test", gc_test, MRB_ARGS_NONE());
1636
- #endif
1637
- #endif
1638
1640
  }