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
@@ -77,7 +77,7 @@ def respond_to_missing?(m, b)
77
77
 
78
78
  assert 'instance' do
79
79
  assert_kind_of Method, 1.method(:+)
80
- assert_kind_of UnboundMethod, Fixnum.instance_method(:+)
80
+ assert_kind_of UnboundMethod, Integer.instance_method(:+)
81
81
  end
82
82
 
83
83
  assert 'Method#call' do
@@ -404,9 +404,9 @@ def respond_to_missing?(m, b)
404
404
  end
405
405
 
406
406
  assert 'UnboundMethod#==' do
407
- assert_false(Fixnum.instance_method(:+) == Fixnum.instance_method(:-))
408
- assert_true(Fixnum.instance_method(:+) == Fixnum.instance_method(:+))
409
- assert_false(Fixnum.instance_method(:+) == Float.instance_method(:+))
407
+ assert_false(Integer.instance_method(:+) == Integer.instance_method(:-))
408
+ assert_true(Integer.instance_method(:+) == Integer.instance_method(:+))
409
+ assert_false(Integer.instance_method(:+) == Float.instance_method(:+))
410
410
  assert_true(UnboundMethod.instance_method(:==) == UnboundMethod.instance_method(:eql?))
411
411
  end
412
412
 
@@ -1,6 +1,7 @@
1
1
  #include <limits.h>
2
2
  #include <mruby.h>
3
3
  #include <mruby/numeric.h>
4
+ #include <mruby/presym.h>
4
5
 
5
6
  /*
6
7
  * call-seq:
@@ -53,24 +54,24 @@ mrb_int_nobits(mrb_state *mrb, mrb_value self)
53
54
  void
54
55
  mrb_mruby_numeric_ext_gem_init(mrb_state* mrb)
55
56
  {
56
- struct RClass *i = mrb_module_get(mrb, "Integral");
57
+ struct RClass *i = mrb_class_get(mrb, "Integer");
57
58
 
58
59
  mrb_define_method(mrb, i, "allbits?", mrb_int_allbits, MRB_ARGS_REQ(1));
59
60
  mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1));
60
61
  mrb_define_method(mrb, i, "nobits?", mrb_int_nobits, MRB_ARGS_REQ(1));
61
62
 
62
- #ifndef MRB_WITHOUT_FLOAT
63
- mrb_define_const(mrb, mrb->float_class, "RADIX", mrb_fixnum_value(MRB_FLT_RADIX));
64
- mrb_define_const(mrb, mrb->float_class, "MANT_DIG", mrb_fixnum_value(MRB_FLT_MANT_DIG));
65
- mrb_define_const(mrb, mrb->float_class, "EPSILON", mrb_float_value(mrb, MRB_FLT_EPSILON));
66
- mrb_define_const(mrb, mrb->float_class, "DIG", mrb_fixnum_value(MRB_FLT_DIG));
67
- mrb_define_const(mrb, mrb->float_class, "MIN_EXP", mrb_fixnum_value(MRB_FLT_MIN_EXP));
68
- mrb_define_const(mrb, mrb->float_class, "MIN", mrb_float_value(mrb, MRB_FLT_MIN));
69
- mrb_define_const(mrb, mrb->float_class, "MIN_10_EXP", mrb_fixnum_value(MRB_FLT_MIN_10_EXP));
70
- mrb_define_const(mrb, mrb->float_class, "MAX_EXP", mrb_fixnum_value(MRB_FLT_MAX_EXP));
71
- mrb_define_const(mrb, mrb->float_class, "MAX", mrb_float_value(mrb, MRB_FLT_MAX));
72
- mrb_define_const(mrb, mrb->float_class, "MAX_10_EXP", mrb_fixnum_value(MRB_FLT_MAX_10_EXP));
73
- #endif /* MRB_WITHOUT_FLOAT */
63
+ #ifndef MRB_NO_FLOAT
64
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(RADIX), mrb_fixnum_value(MRB_FLT_RADIX));
65
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MANT_DIG), mrb_fixnum_value(MRB_FLT_MANT_DIG));
66
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(EPSILON), mrb_float_value(mrb, MRB_FLT_EPSILON));
67
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(DIG), mrb_fixnum_value(MRB_FLT_DIG));
68
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MIN_EXP), mrb_fixnum_value(MRB_FLT_MIN_EXP));
69
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MIN), mrb_float_value(mrb, MRB_FLT_MIN));
70
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MIN_10_EXP), mrb_fixnum_value(MRB_FLT_MIN_10_EXP));
71
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MAX_EXP), mrb_fixnum_value(MRB_FLT_MAX_EXP));
72
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MAX), mrb_float_value(mrb, MRB_FLT_MAX));
73
+ mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MAX_10_EXP), mrb_fixnum_value(MRB_FLT_MAX_10_EXP));
74
+ #endif /* MRB_NO_FLOAT */
74
75
  }
75
76
 
76
77
  void
@@ -3,6 +3,7 @@
3
3
  #include <mruby/class.h>
4
4
  #include <mruby/hash.h>
5
5
  #include <mruby/proc.h>
6
+ #include <mruby/presym.h>
6
7
 
7
8
  /*
8
9
  * call-seq:
@@ -17,7 +18,7 @@ nil_to_a(mrb_state *mrb, mrb_value obj)
17
18
  return mrb_ary_new(mrb);
18
19
  }
19
20
 
20
- #ifndef MRB_WITHOUT_FLOAT
21
+ #ifndef MRB_NO_FLOAT
21
22
  /*
22
23
  * call-seq:
23
24
  * nil.to_f -> 0.0
@@ -105,7 +106,7 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self)
105
106
  if (mrb->c->ci->acc < 0) {
106
107
  return mrb_yield_with_class(mrb, blk, argc, argv, self, c);
107
108
  }
108
- mrb->c->ci->target_class = c;
109
+ mrb_vm_ci_target_class_set(mrb->c->ci, c);
109
110
  return mrb_yield_cont(mrb, blk, self, argc, argv);
110
111
  }
111
112
 
@@ -115,7 +116,7 @@ mrb_mruby_object_ext_gem_init(mrb_state* mrb)
115
116
  struct RClass * n = mrb->nil_class;
116
117
 
117
118
  mrb_define_method(mrb, n, "to_a", nil_to_a, MRB_ARGS_NONE());
118
- #ifndef MRB_WITHOUT_FLOAT
119
+ #ifndef MRB_NO_FLOAT
119
120
  mrb_define_method(mrb, n, "to_f", nil_to_f, MRB_ARGS_NONE());
120
121
  #endif
121
122
  mrb_define_method(mrb, n, "to_h", nil_to_h, MRB_ARGS_NONE());
@@ -123,7 +124,7 @@ mrb_mruby_object_ext_gem_init(mrb_state* mrb)
123
124
 
124
125
  mrb_define_method(mrb, mrb->kernel_module, "itself", mrb_f_itself, MRB_ARGS_NONE());
125
126
 
126
- mrb_define_method(mrb, mrb_class_get(mrb, "BasicObject"), "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK());
127
+ mrb_define_method(mrb, mrb_class_get_id(mrb, MRB_SYM(BasicObject)), "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK());
127
128
  }
128
129
 
129
130
  void
@@ -2,6 +2,15 @@
2
2
  #include <mruby/gc.h>
3
3
  #include <mruby/hash.h>
4
4
  #include <mruby/class.h>
5
+ #include <mruby/object.h>
6
+ #include <mruby/numeric.h>
7
+ #include <mruby/string.h>
8
+ #include <mruby/array.h>
9
+ #include <mruby/variable.h>
10
+ #include <mruby/proc.h>
11
+ #include <mruby/value.h>
12
+ #include <mruby/range.h>
13
+ #include <mruby/presym.h>
5
14
 
6
15
  struct os_count_struct {
7
16
  mrb_int total;
@@ -63,8 +72,8 @@ os_count_objects(mrb_state *mrb, mrb_value self)
63
72
 
64
73
  mrb_objspace_each_objects(mrb, os_count_object_type, &obj_count);
65
74
 
66
- mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "TOTAL")), mrb_fixnum_value(obj_count.total));
67
- mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "FREE")), mrb_fixnum_value(obj_count.freed));
75
+ mrb_hash_set(mrb, hash, mrb_symbol_value(MRB_SYM(TOTAL)), mrb_fixnum_value(obj_count.total));
76
+ mrb_hash_set(mrb, hash, mrb_symbol_value(MRB_SYM(FREE)), mrb_fixnum_value(obj_count.freed));
68
77
 
69
78
  for (i = MRB_TT_FALSE; i < MRB_TT_MAXDEFINE; i++) {
70
79
  mrb_value type;
@@ -73,7 +82,7 @@ os_count_objects(mrb_state *mrb, mrb_value self)
73
82
  COUNT_TYPE(T_FALSE);
74
83
  COUNT_TYPE(T_FREE);
75
84
  COUNT_TYPE(T_TRUE);
76
- COUNT_TYPE(T_FIXNUM);
85
+ COUNT_TYPE(T_INTEGER);
77
86
  COUNT_TYPE(T_SYMBOL);
78
87
  COUNT_TYPE(T_UNDEF);
79
88
  COUNT_TYPE(T_FLOAT);
@@ -92,6 +101,7 @@ os_count_objects(mrb_state *mrb, mrb_value self)
92
101
  COUNT_TYPE(T_ENV);
93
102
  COUNT_TYPE(T_DATA);
94
103
  COUNT_TYPE(T_FIBER);
104
+ COUNT_TYPE(T_ISTRUCT);
95
105
  #undef COUNT_TYPE
96
106
  default:
97
107
  type = mrb_fixnum_value(i); break;
@@ -104,9 +114,9 @@ os_count_objects(mrb_state *mrb, mrb_value self)
104
114
  }
105
115
 
106
116
  struct os_each_object_data {
107
- mrb_value block;
108
117
  struct RClass *target_module;
109
118
  mrb_int count;
119
+ mrb_value block;
110
120
  };
111
121
 
112
122
  static int
@@ -121,8 +131,8 @@ os_each_object_cb(mrb_state *mrb, struct RBasic *obj, void *ud)
121
131
 
122
132
  /* filter internal objects */
123
133
  switch (obj->tt) {
124
- case MRB_TT_ENV:
125
- case MRB_TT_ICLASS:
134
+ case MRB_TT_FREE: case MRB_TT_ENV:
135
+ case MRB_TT_BREAK: case MRB_TT_ICLASS:
126
136
  return MRB_EACH_OBJ_OK;
127
137
  default:
128
138
  break;
@@ -158,12 +168,8 @@ os_each_object_cb(mrb_state *mrb, struct RBasic *obj, void *ud)
158
168
  static mrb_value
159
169
  os_each_object(mrb_state *mrb, mrb_value self)
160
170
  {
161
- mrb_value cls = mrb_nil_value();
162
- struct os_each_object_data d;
163
- mrb_get_args(mrb, "&!|C", &d.block, &cls);
164
-
165
- d.target_module = mrb_nil_p(cls) ? NULL : mrb_class_ptr(cls);
166
- d.count = 0;
171
+ struct os_each_object_data d = {0};
172
+ mrb_get_args(mrb, "&!|c", &d.block, &d.target_module);
167
173
  mrb_objspace_each_objects(mrb, os_each_object_cb, &d);
168
174
  return mrb_fixnum_value(d.count);
169
175
  }
@@ -0,0 +1,10 @@
1
+ MRuby::Gem::Specification.new('mruby-os-memsize') do |spec|
2
+ spec.license = 'MIT'
3
+ spec.author = 'mruby developers'
4
+ spec.summary = 'ObjectSpace memsize_of method'
5
+
6
+ spec.add_dependency('mruby-objectspace')
7
+ spec.add_test_dependency('mruby-metaprog')
8
+ spec.add_test_dependency('mruby-method')
9
+ spec.add_test_dependency('mruby-fiber')
10
+ end
@@ -0,0 +1,231 @@
1
+ #include <mruby.h>
2
+ #include <mruby/gc.h>
3
+ #include <mruby/hash.h>
4
+ #include <mruby/class.h>
5
+ #include <mruby/object.h>
6
+ #include <mruby/numeric.h>
7
+ #include <mruby/string.h>
8
+ #include <mruby/array.h>
9
+ #include <mruby/variable.h>
10
+ #include <mruby/proc.h>
11
+ #include <mruby/value.h>
12
+ #include <mruby/range.h>
13
+
14
+ static size_t
15
+ os_memsize_of_irep(mrb_state* state, const struct mrb_irep *irep)
16
+ {
17
+ size_t size;
18
+ int i;
19
+
20
+ size = (irep->slen * sizeof(mrb_sym)) +
21
+ (irep->plen * sizeof(mrb_code)) +
22
+ (irep->ilen * sizeof(mrb_code));
23
+
24
+ for(i = 0; i < irep->rlen; i++) {
25
+ size += os_memsize_of_irep(state, irep->reps[i]);
26
+ }
27
+ return size;
28
+ }
29
+
30
+ static size_t
31
+ os_memsize_of_method(mrb_state* mrb, mrb_value method_obj)
32
+ {
33
+ size_t size;
34
+ mrb_value proc_value = mrb_obj_iv_get(mrb, mrb_obj_ptr(method_obj),
35
+ mrb_intern_lit(mrb, "_proc"));
36
+ if (mrb_nil_p(proc_value)) return 0;
37
+ struct RProc *proc = mrb_proc_ptr(proc_value);
38
+
39
+ size = sizeof(struct RProc);
40
+ if (!MRB_PROC_CFUNC_P(proc)) size += os_memsize_of_irep(mrb, proc->body.irep);
41
+ return size;
42
+ }
43
+
44
+ static mrb_bool
45
+ obj_is_kind_of_checked(mrb_state *mrb, mrb_value obj, const char *classname)
46
+ {
47
+ mrb_value objclass = mrb_obj_value(mrb->object_class);
48
+
49
+ if (mrb_const_defined(mrb, objclass, mrb_intern_cstr(mrb, classname))) {
50
+ struct RClass *klass = mrb_class_get(mrb, classname);
51
+ return mrb_obj_is_kind_of(mrb, obj, klass);
52
+ }
53
+
54
+ return FALSE;
55
+ }
56
+
57
+ static size_t
58
+ os_memsize_of_object(mrb_state* mrb, mrb_value obj)
59
+ {
60
+ size_t size = 0;
61
+
62
+ switch(mrb_type(obj)) {
63
+ case MRB_TT_STRING:
64
+ size += mrb_objspace_page_slot_size();
65
+ if (!RSTR_EMBED_P(RSTRING(obj)) && !RSTR_SHARED_P(RSTRING(obj))) {
66
+ size += RSTRING_CAPA(obj);
67
+ size++; /* NUL terminator */
68
+ }
69
+ break;
70
+ case MRB_TT_CLASS:
71
+ case MRB_TT_MODULE:
72
+ case MRB_TT_SCLASS:
73
+ case MRB_TT_ICLASS:
74
+ size += mrb_gc_mark_mt_size(mrb, mrb_class_ptr(obj)) * sizeof(mrb_method_t);
75
+ /* fall through */
76
+ case MRB_TT_EXCEPTION:
77
+ case MRB_TT_OBJECT: {
78
+ size += mrb_objspace_page_slot_size();
79
+ size += mrb_obj_iv_tbl_memsize(obj);
80
+ if (obj_is_kind_of_checked(mrb, obj, "UnboundMethod") ||
81
+ obj_is_kind_of_checked(mrb, obj, "Method")) {
82
+ size += os_memsize_of_method(mrb, obj);
83
+ }
84
+ break;
85
+ }
86
+ case MRB_TT_HASH: {
87
+ size += mrb_objspace_page_slot_size() +
88
+ mrb_hash_memsize(obj);
89
+ break;
90
+ }
91
+ case MRB_TT_ARRAY: {
92
+ mrb_int len = RARRAY_LEN(obj);
93
+ /* Arrays that do not fit within an RArray perform a heap allocation
94
+ * storing an array of pointers to the original objects*/
95
+ size += mrb_objspace_page_slot_size();
96
+ if(len > MRB_ARY_EMBED_LEN_MAX) size += sizeof(mrb_value *) * len;
97
+ break;
98
+ }
99
+ case MRB_TT_PROC: {
100
+ struct RProc* proc = mrb_proc_ptr(obj);
101
+ size += mrb_objspace_page_slot_size();
102
+ size += MRB_ENV_LEN(proc->e.env) * sizeof(mrb_value);
103
+ if(!MRB_PROC_CFUNC_P(proc)) size += os_memsize_of_irep(mrb, proc->body.irep);
104
+ break;
105
+ }
106
+ case MRB_TT_RANGE:
107
+ #ifndef MRB_RANGE_EMBED
108
+ size += mrb_objspace_page_slot_size() +
109
+ sizeof(struct mrb_range_edges);
110
+ #endif
111
+ break;
112
+ case MRB_TT_FIBER: {
113
+ struct RFiber* f = (struct RFiber *)mrb_ptr(obj);
114
+ ptrdiff_t stack_size = f->cxt->stend - f->cxt->stbase;
115
+ ptrdiff_t ci_size = f->cxt->ciend - f->cxt->cibase;
116
+
117
+ size += mrb_objspace_page_slot_size() +
118
+ sizeof(struct mrb_context) +
119
+ sizeof(mrb_value) * stack_size +
120
+ sizeof(mrb_callinfo) * ci_size;
121
+ break;
122
+ }
123
+ #ifndef MRB_NO_FLOAT
124
+ case MRB_TT_FLOAT:
125
+ #endif
126
+ case MRB_TT_INTEGER:
127
+ if (mrb_immediate_p(obj))
128
+ break;
129
+ case MRB_TT_DATA:
130
+ case MRB_TT_ISTRUCT:
131
+ size += mrb_objspace_page_slot_size();
132
+ break;
133
+ /* zero heap size types.
134
+ * immediate VM stack values, contained within mrb_state, or on C stack */
135
+ case MRB_TT_TRUE:
136
+ case MRB_TT_FALSE:
137
+ case MRB_TT_BREAK:
138
+ case MRB_TT_CPTR:
139
+ case MRB_TT_SYMBOL:
140
+ case MRB_TT_FREE:
141
+ case MRB_TT_UNDEF:
142
+ case MRB_TT_ENV:
143
+ /* never used, silences compiler warning
144
+ * not having a default: clause lets the compiler tell us when there is a new
145
+ * TT not accounted for */
146
+ case MRB_TT_MAXDEFINE:
147
+ break;
148
+ }
149
+ return size;
150
+ }
151
+
152
+ /*
153
+ * call-seq:
154
+ * ObjectSpace.memsize_of(obj) -> Numeric
155
+ *
156
+ * Returns the amount of heap memory allocated for object in size_t units.
157
+ *
158
+ * The return value depends on the definition of size_t on that platform,
159
+ * therefore the value is not comparable across platform types.
160
+ *
161
+ * Immediate values such as integers, booleans, symbols and unboxed float numbers
162
+ * return 0. Additionally special objects which are small enough to fit inside an
163
+ * object pointer, termed embedded objects, will return the size of the object pointer.
164
+ * Strings and arrays below a compile-time defined size may be embedded.
165
+ */
166
+
167
+ static mrb_value
168
+ os_memsize_of(mrb_state *mrb, mrb_value self)
169
+ {
170
+ size_t total;
171
+ mrb_value obj;
172
+
173
+ mrb_get_args(mrb, "o", &obj);
174
+
175
+ total = os_memsize_of_object(mrb, obj);
176
+ return mrb_fixnum_value((mrb_int)total);
177
+ }
178
+
179
+ struct os_memsize_of_all_cb_data {
180
+ size_t t;
181
+ struct RClass *type;
182
+ };
183
+
184
+ static int
185
+ os_memsize_of_all_cb(mrb_state *mrb, struct RBasic *obj, void *d)
186
+ {
187
+ struct os_memsize_of_all_cb_data *data = (struct os_memsize_of_all_cb_data *)d;
188
+ switch (obj->tt) {
189
+ case MRB_TT_FREE: case MRB_TT_ENV:
190
+ case MRB_TT_BREAK: case MRB_TT_ICLASS:
191
+ /* internal objects that should not be counted */
192
+ return MRB_EACH_OBJ_OK;
193
+ default:
194
+ break;
195
+ }
196
+ /* skip Proc objects for methods */
197
+ if (obj->c == NULL) return 0;
198
+ if (data->type == NULL || mrb_obj_is_kind_of(mrb, mrb_obj_value(obj), data->type))
199
+ data->t += os_memsize_of_object(mrb, mrb_obj_value(obj));
200
+ return MRB_EACH_OBJ_OK;
201
+ }
202
+
203
+ /*
204
+ * call-seq:
205
+ * ObjectSpace.memsize_of_all([klass]) -> Numeric
206
+ *
207
+ * Return consuming memory size of all living objects of type klass.
208
+ *
209
+ */
210
+
211
+ static mrb_value
212
+ os_memsize_of_all(mrb_state *mrb, mrb_value self)
213
+ {
214
+ struct os_memsize_of_all_cb_data data = { 0 };
215
+ mrb_get_args(mrb, "|c", &data.type);
216
+ mrb_objspace_each_objects(mrb, os_memsize_of_all_cb, &data);
217
+ return mrb_fixnum_value((mrb_int)data.t);
218
+ }
219
+
220
+ void
221
+ mrb_mruby_os_memsize_gem_init(mrb_state *mrb)
222
+ {
223
+ struct RClass *os = mrb_module_get(mrb, "ObjectSpace");
224
+ mrb_define_class_method(mrb, os, "memsize_of", os_memsize_of, MRB_ARGS_REQ(1));
225
+ mrb_define_class_method(mrb, os, "memsize_of_all", os_memsize_of_all, MRB_ARGS_OPT(1));
226
+ }
227
+
228
+ void
229
+ mrb_mruby_os_memsize_gem_final(mrb_state *mrb)
230
+ {
231
+ }
@@ -0,0 +1,63 @@
1
+ assert 'ObjectSpace.memsize_of' do
2
+ # immediate literals
3
+ int_size = ObjectSpace.memsize_of 1
4
+ assert_equal int_size, 0, 'int zero'
5
+
6
+ sym_size = ObjectSpace.memsize_of :foo
7
+ assert_equal sym_size, 0, 'sym zero'
8
+
9
+ assert_equal ObjectSpace.memsize_of(true), int_size
10
+ assert_equal ObjectSpace.memsize_of(false), int_size
11
+
12
+ assert_not_equal ObjectSpace.memsize_of('a'), 0, 'memsize of str'
13
+
14
+ if __ENCODING__ == "UTF-8"
15
+ assert_not_equal ObjectSpace.memsize_of("こんにちは世界"), 0, 'memsize of utf8 str'
16
+ end
17
+
18
+ # class defs
19
+ class_obj_size = ObjectSpace.memsize_of Class
20
+ assert_not_equal class_obj_size, 0, 'Class obj not zero'
21
+
22
+ empty_class_def_size = ObjectSpace.memsize_of Class.new
23
+ assert_not_equal empty_class_def_size, 0, 'Class def not zero'
24
+
25
+ proc_size = ObjectSpace.memsize_of Proc.new { x = 1; x }
26
+ assert_not_equal proc_size, 0
27
+
28
+ class_with_methods = Class.new do
29
+ def foo
30
+ a = 0
31
+ a + 1
32
+ end
33
+ end
34
+
35
+ m_size = ObjectSpace.memsize_of class_with_methods.instance_method(:foo)
36
+ assert_not_equal m_size, 0, 'method size not zero'
37
+
38
+ # collections
39
+ empty_array_size = ObjectSpace.memsize_of []
40
+ assert_not_equal empty_array_size, 0, 'empty array size not zero'
41
+ assert_operator empty_array_size, :<, ObjectSpace.memsize_of(Array.new(16)), 'large array size greater than embed'
42
+
43
+ # fiber
44
+ empty_fiber_size = ObjectSpace.memsize_of(Fiber.new {})
45
+ assert_not_equal empty_fiber_size, 0, 'empty fiber not zero'
46
+
47
+ #hash
48
+ assert_not_equal ObjectSpace.memsize_of({}), 0, 'empty hash size not zero'
49
+ end
50
+
51
+ assert 'ObjectSpace.memsize_of_all' do
52
+ foo_class = Class.new do
53
+ def initialize
54
+ @a = 'a'
55
+ @b = 'b'
56
+ end
57
+ end
58
+
59
+ foos = Array.new(10) { foo_class.new }
60
+ foo_size = ObjectSpace.memsize_of(foos.first)
61
+
62
+ assert_equal ObjectSpace.memsize_of_all(foo_class), foo_size * foos.size, 'Memsize of all instance'
63
+ end