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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile +2 -2
- data/ext/enterprise_script_service/Rakefile +1 -1
- data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +117 -74
- data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +41 -37
- data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
- data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
- data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
- data/ext/enterprise_script_service/mruby/.travis.yml +2 -2
- data/ext/enterprise_script_service/mruby/.yamllint +8 -0
- data/ext/enterprise_script_service/mruby/AUTHORS +3 -0
- data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
- data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
- data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
- data/ext/enterprise_script_service/mruby/LICENSE +1 -1
- data/ext/enterprise_script_service/mruby/Makefile +1 -1
- data/ext/enterprise_script_service/mruby/README.md +4 -14
- data/ext/enterprise_script_service/mruby/Rakefile +18 -108
- data/ext/enterprise_script_service/mruby/TODO.md +17 -0
- data/ext/enterprise_script_service/mruby/appveyor.yml +31 -25
- data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
- data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +2 -19
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +2 -2
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +1 -18
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +2 -19
- data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
- 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
- data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +2 -19
- data/ext/enterprise_script_service/mruby/{travis_config.rb → build_config/ci/gcc-clang.rb} +10 -10
- data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
- data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
- data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_dreamcast_shelf.rb → build_config/dreamcast_shelf.rb} +5 -19
- data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
- data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
- data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
- data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
- data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
- data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
- data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
- data/ext/enterprise_script_service/mruby/doc/guides/compile.md +138 -49
- data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
- data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
- data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +49 -22
- data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
- data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
- data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
- data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
- data/ext/enterprise_script_service/mruby/doc/opcode.md +93 -107
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
- data/ext/enterprise_script_service/mruby/include/mrbconf.h +81 -62
- data/ext/enterprise_script_service/mruby/include/mruby.h +137 -96
- data/ext/enterprise_script_service/mruby/include/mruby/array.h +23 -6
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +73 -48
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +79 -48
- data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
- data/ext/enterprise_script_service/mruby/include/mruby/common.h +4 -1
- data/ext/enterprise_script_service/mruby/include/mruby/compile.h +13 -7
- data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/dump.h +17 -35
- data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
- data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
- data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
- data/ext/enterprise_script_service/mruby/include/mruby/irep.h +64 -14
- data/ext/enterprise_script_service/mruby/include/mruby/khash.h +6 -14
- data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +36 -63
- data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
- data/ext/enterprise_script_service/mruby/include/mruby/ops.h +27 -23
- data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
- data/ext/enterprise_script_service/mruby/include/mruby/proc.h +80 -13
- data/ext/enterprise_script_service/mruby/include/mruby/string.h +10 -15
- data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
- data/ext/enterprise_script_service/mruby/include/mruby/value.h +29 -19
- data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/version.h +26 -7
- data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -44
- data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +55 -37
- data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
- data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
- data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +75 -32
- data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
- data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -88
- data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
- data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +5 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +28 -19
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +41 -34
- data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +19 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +22 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +2 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +430 -399
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +559 -217
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +4774 -4193
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +18 -19
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +8 -7
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +17 -25
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +18 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +30 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +55 -52
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +4 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +99 -87
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +2 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +2 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +7 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +43 -58
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +77 -74
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +5 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +38 -88
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +62 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +32 -19
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +20 -40
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +11 -17
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +102 -71
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +4 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +13 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +18 -25
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +6 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +16 -44
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +27 -27
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
- data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
- data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
- data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrblib/hash.rb +0 -20
- data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
- data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
- data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
- data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
- data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
- data/ext/enterprise_script_service/mruby/src/array.c +43 -80
- data/ext/enterprise_script_service/mruby/src/backtrace.c +16 -17
- data/ext/enterprise_script_service/mruby/src/class.c +774 -182
- data/ext/enterprise_script_service/mruby/src/codedump.c +223 -198
- data/ext/enterprise_script_service/mruby/src/debug.c +6 -6
- data/ext/enterprise_script_service/mruby/src/dump.c +466 -141
- data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
- data/ext/enterprise_script_service/mruby/src/error.c +36 -13
- data/ext/enterprise_script_service/mruby/src/etc.c +43 -34
- data/ext/enterprise_script_service/mruby/src/fmt_fp.c +5 -6
- data/ext/enterprise_script_service/mruby/src/gc.c +73 -71
- data/ext/enterprise_script_service/mruby/src/hash.c +1050 -707
- data/ext/enterprise_script_service/mruby/src/kernel.c +75 -220
- data/ext/enterprise_script_service/mruby/src/load.c +196 -166
- data/ext/enterprise_script_service/mruby/src/numeric.c +352 -314
- data/ext/enterprise_script_service/mruby/src/object.c +97 -90
- data/ext/enterprise_script_service/mruby/src/print.c +4 -3
- data/ext/enterprise_script_service/mruby/src/proc.c +48 -56
- data/ext/enterprise_script_service/mruby/src/range.c +45 -21
- data/ext/enterprise_script_service/mruby/src/state.c +25 -32
- data/ext/enterprise_script_service/mruby/src/string.c +59 -101
- data/ext/enterprise_script_service/mruby/src/symbol.c +121 -56
- data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
- data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
- data/ext/enterprise_script_service/mruby/src/vm.c +617 -602
- data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
- data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
- data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
- data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
- data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +83 -77
- data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
- data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
- data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
- data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
- data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
- data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +6 -5
- data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +10 -14
- data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +17 -21
- data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
- data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
- data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
- data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
- data/ext/enterprise_script_service/mruby/test/t/float.rb +18 -8
- data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
- data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
- data/ext/enterprise_script_service/mruby/test/t/kernel.rb +1 -1
- data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
- data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
- data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
- data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
- data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
- data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
- data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
- data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
- data/ext/enterprise_script_service/mruby_config.rb +2 -5
- data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
- data/lib/script_core/version.rb +1 -1
- data/spec/script_core_spec.rb +13 -0
- metadata +61 -23
- data/ext/enterprise_script_service/mruby/.github/workflows/main.yml +0 -24
- data/ext/enterprise_script_service/mruby/TODO +0 -8
- data/ext/enterprise_script_service/mruby/appveyor_config.rb +0 -46
- data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
- data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
- data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
- 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,
|
|
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(
|
|
408
|
-
assert_true(
|
|
409
|
-
assert_false(
|
|
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 =
|
|
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
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
#endif /*
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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(
|
|
67
|
-
mrb_hash_set(mrb, hash, mrb_symbol_value(
|
|
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(
|
|
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
|
-
|
|
162
|
-
|
|
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
|