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
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
#include <mruby/array.h>
|
|
5
5
|
#include <mruby/string.h>
|
|
6
6
|
#include <mruby/debug.h>
|
|
7
|
+
#include <mruby/presym.h>
|
|
7
8
|
|
|
8
9
|
static mrb_value
|
|
9
10
|
mrb_proc_lambda_p(mrb_state *mrb, mrb_value self)
|
|
@@ -21,7 +22,7 @@ mrb_proc_source_location(mrb_state *mrb, mrb_value self)
|
|
|
21
22
|
return mrb_nil_value();
|
|
22
23
|
}
|
|
23
24
|
else {
|
|
24
|
-
mrb_irep *irep = p->body.irep;
|
|
25
|
+
const mrb_irep *irep = p->body.irep;
|
|
25
26
|
int32_t line;
|
|
26
27
|
const char *filename;
|
|
27
28
|
|
|
@@ -41,7 +42,7 @@ mrb_proc_inspect(mrb_state *mrb, mrb_value self)
|
|
|
41
42
|
mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_cptr(self)));
|
|
42
43
|
|
|
43
44
|
if (!MRB_PROC_CFUNC_P(p)) {
|
|
44
|
-
mrb_irep *irep = p->body.irep;
|
|
45
|
+
const mrb_irep *irep = p->body.irep;
|
|
45
46
|
const char *filename;
|
|
46
47
|
int32_t line;
|
|
47
48
|
mrb_str_cat_lit(mrb, str, "@");
|
|
@@ -91,21 +92,24 @@ static mrb_value
|
|
|
91
92
|
mrb_proc_parameters(mrb_state *mrb, mrb_value self)
|
|
92
93
|
{
|
|
93
94
|
struct parameters_type {
|
|
94
|
-
|
|
95
|
-
const char *name;
|
|
95
|
+
mrb_sym name;
|
|
96
96
|
int size;
|
|
97
97
|
} *p, parameters_list [] = {
|
|
98
|
-
{
|
|
99
|
-
{
|
|
100
|
-
{
|
|
101
|
-
{
|
|
102
|
-
{
|
|
103
|
-
{
|
|
98
|
+
{MRB_SYM(req), 0},
|
|
99
|
+
{MRB_SYM(opt), 0},
|
|
100
|
+
{MRB_SYM(rest), 0},
|
|
101
|
+
{MRB_SYM(req), 0},
|
|
102
|
+
{MRB_SYM(keyrest), 0},
|
|
103
|
+
{MRB_SYM(block), 0},
|
|
104
|
+
{MRB_SYM(key), 0},
|
|
105
|
+
{0, 0}
|
|
104
106
|
};
|
|
105
107
|
const struct RProc *proc = mrb_proc_ptr(self);
|
|
106
|
-
const struct mrb_irep *irep
|
|
108
|
+
const struct mrb_irep *irep;
|
|
107
109
|
mrb_aspec aspec;
|
|
108
110
|
mrb_value parameters;
|
|
111
|
+
mrb_value krest = mrb_nil_value();
|
|
112
|
+
mrb_value block = mrb_nil_value();
|
|
109
113
|
int i, j;
|
|
110
114
|
int max = -1;
|
|
111
115
|
|
|
@@ -113,6 +117,7 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
|
|
|
113
117
|
// TODO cfunc aspec is not implemented yet
|
|
114
118
|
return mrb_ary_new(mrb);
|
|
115
119
|
}
|
|
120
|
+
irep = proc->body.irep;
|
|
116
121
|
if (!irep) {
|
|
117
122
|
return mrb_ary_new(mrb);
|
|
118
123
|
}
|
|
@@ -124,10 +129,8 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
|
|
|
124
129
|
}
|
|
125
130
|
|
|
126
131
|
if (!MRB_PROC_STRICT_P(proc)) {
|
|
127
|
-
parameters_list[0].
|
|
128
|
-
parameters_list[
|
|
129
|
-
parameters_list[3].len = sizeof("opt") - 1;
|
|
130
|
-
parameters_list[3].name = "opt";
|
|
132
|
+
parameters_list[0].name = MRB_SYM(opt);
|
|
133
|
+
parameters_list[3].name = MRB_SYM(opt);
|
|
131
134
|
}
|
|
132
135
|
|
|
133
136
|
aspec = PEEK_W(irep->iseq+1);
|
|
@@ -135,21 +138,23 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
|
|
|
135
138
|
parameters_list[1].size = MRB_ASPEC_OPT(aspec);
|
|
136
139
|
parameters_list[2].size = MRB_ASPEC_REST(aspec);
|
|
137
140
|
parameters_list[3].size = MRB_ASPEC_POST(aspec);
|
|
138
|
-
parameters_list[4].size =
|
|
141
|
+
parameters_list[4].size = MRB_ASPEC_KDICT(aspec);
|
|
142
|
+
parameters_list[5].size = MRB_ASPEC_BLOCK(aspec);
|
|
143
|
+
parameters_list[6].size = MRB_ASPEC_KEY(aspec);
|
|
139
144
|
|
|
140
145
|
parameters = mrb_ary_new_capa(mrb, irep->nlocals-1);
|
|
141
146
|
|
|
142
147
|
max = irep->nlocals-1;
|
|
143
148
|
for (i = 0, p = parameters_list; p->name; p++) {
|
|
144
|
-
mrb_value sname = mrb_symbol_value(
|
|
149
|
+
mrb_value sname = mrb_symbol_value(p->name);
|
|
145
150
|
|
|
146
151
|
for (j = 0; j < p->size; i++, j++) {
|
|
147
152
|
mrb_value a;
|
|
148
153
|
|
|
149
154
|
a = mrb_ary_new(mrb);
|
|
150
155
|
mrb_ary_push(mrb, a, sname);
|
|
151
|
-
if (i < max && irep->lv[i]
|
|
152
|
-
mrb_sym sym = irep->lv[i]
|
|
156
|
+
if (i < max && irep->lv[i]) {
|
|
157
|
+
mrb_sym sym = irep->lv[i];
|
|
153
158
|
const char *name = mrb_sym_name(mrb, sym);
|
|
154
159
|
switch (name[0]) {
|
|
155
160
|
case '*': case '&':
|
|
@@ -159,9 +164,17 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
|
|
|
159
164
|
break;
|
|
160
165
|
}
|
|
161
166
|
}
|
|
167
|
+
if (p->name == MRB_SYM(block)) {
|
|
168
|
+
block = a; continue;
|
|
169
|
+
}
|
|
170
|
+
if (p->name == MRB_SYM(keyrest)) {
|
|
171
|
+
krest = a; continue;
|
|
172
|
+
}
|
|
162
173
|
mrb_ary_push(mrb, parameters, a);
|
|
163
174
|
}
|
|
164
175
|
}
|
|
176
|
+
if (!mrb_nil_p(krest)) mrb_ary_push(mrb, parameters, krest);
|
|
177
|
+
if (!mrb_nil_p(block)) mrb_ary_push(mrb, parameters, block);
|
|
165
178
|
return parameters;
|
|
166
179
|
}
|
|
167
180
|
|
|
@@ -10,16 +10,41 @@
|
|
|
10
10
|
#include <mruby/data.h>
|
|
11
11
|
#include <mruby/array.h>
|
|
12
12
|
#include <mruby/istruct.h>
|
|
13
|
-
#
|
|
13
|
+
#include <mruby/presym.h>
|
|
14
|
+
|
|
15
|
+
#include <time.h>
|
|
16
|
+
|
|
17
|
+
/* Written in 2019 by David Blackman and Sebastiano Vigna (vigna@acm.org)
|
|
18
|
+
|
|
19
|
+
To the extent possible under law, the author has dedicated all copyright
|
|
20
|
+
and related and neighboring rights to this software to the public domain
|
|
21
|
+
worldwide. This software is distributed without any warranty.
|
|
22
|
+
|
|
23
|
+
See <https://creativecommons.org/publicdomain/zero/1.0/>. */
|
|
24
|
+
|
|
25
|
+
#include <stdint.h>
|
|
26
|
+
|
|
27
|
+
/* This is xoshiro128++ 1.0, one of our 32-bit all-purpose, rock-solid
|
|
28
|
+
generators. It has excellent speed, a state size (128 bits) that is
|
|
29
|
+
large enough for mild parallelism, and it passes all tests we are aware
|
|
30
|
+
of.
|
|
31
|
+
|
|
32
|
+
For generating just single-precision (i.e., 32-bit) floating-point
|
|
33
|
+
numbers, xoshiro128+ is even faster.
|
|
34
|
+
|
|
35
|
+
The state must be seeded so that it is not everywhere zero. */
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
#ifdef MRB_32BIT
|
|
14
39
|
# define XORSHIFT96
|
|
15
40
|
# define NSEEDS 3
|
|
41
|
+
# define SEEDPOS 2
|
|
16
42
|
#else
|
|
17
43
|
# define NSEEDS 4
|
|
44
|
+
# define SEEDPOS 0
|
|
18
45
|
#endif
|
|
19
46
|
#define LASTSEED (NSEEDS-1)
|
|
20
47
|
|
|
21
|
-
#include <time.h>
|
|
22
|
-
|
|
23
48
|
typedef struct rand_state {
|
|
24
49
|
uint32_t seed[NSEEDS];
|
|
25
50
|
} rand_state;
|
|
@@ -38,16 +63,23 @@ rand_init(rand_state *t)
|
|
|
38
63
|
static uint32_t
|
|
39
64
|
rand_seed(rand_state *t, uint32_t seed)
|
|
40
65
|
{
|
|
41
|
-
uint32_t old_seed = t->seed[
|
|
66
|
+
uint32_t old_seed = t->seed[SEEDPOS];
|
|
42
67
|
rand_init(t);
|
|
43
|
-
t->seed[
|
|
68
|
+
t->seed[SEEDPOS] = seed;
|
|
44
69
|
return old_seed;
|
|
45
70
|
}
|
|
46
71
|
|
|
47
|
-
#
|
|
72
|
+
#ifndef XORSHIFT96
|
|
73
|
+
static inline uint32_t
|
|
74
|
+
rotl(const uint32_t x, int k) {
|
|
75
|
+
return (x << k) | (x >> (32 - k));
|
|
76
|
+
}
|
|
77
|
+
#endif
|
|
78
|
+
|
|
48
79
|
static uint32_t
|
|
49
80
|
rand_uint32(rand_state *state)
|
|
50
81
|
{
|
|
82
|
+
#ifdef XORSHIFT96
|
|
51
83
|
uint32_t *seed = state->seed;
|
|
52
84
|
uint32_t x = seed[0];
|
|
53
85
|
uint32_t y = seed[1];
|
|
@@ -61,36 +93,29 @@ rand_uint32(rand_state *state)
|
|
|
61
93
|
seed[2] = z;
|
|
62
94
|
|
|
63
95
|
return z;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
{
|
|
69
|
-
uint32_t *seed = state->seed;
|
|
70
|
-
uint32_t x = seed[0];
|
|
71
|
-
uint32_t y = seed[1];
|
|
72
|
-
uint32_t z = seed[2];
|
|
73
|
-
uint32_t w = seed[3];
|
|
74
|
-
uint32_t t;
|
|
96
|
+
#else
|
|
97
|
+
uint32_t *s = state->seed;
|
|
98
|
+
const uint32_t result = rotl(s[0] + s[3], 7) + s[0];
|
|
99
|
+
const uint32_t t = s[1] << 9;
|
|
75
100
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
seed[1] = y;
|
|
81
|
-
seed[2] = z;
|
|
82
|
-
seed[3] = w;
|
|
101
|
+
s[2] ^= s[0];
|
|
102
|
+
s[3] ^= s[1];
|
|
103
|
+
s[1] ^= s[2];
|
|
104
|
+
s[0] ^= s[3];
|
|
83
105
|
|
|
84
|
-
|
|
85
|
-
|
|
106
|
+
s[2] ^= t;
|
|
107
|
+
s[3] = rotl(s[3], 11);
|
|
108
|
+
|
|
109
|
+
return result;
|
|
86
110
|
#endif /* XORSHIFT96 */
|
|
111
|
+
}
|
|
87
112
|
|
|
88
|
-
#ifndef
|
|
113
|
+
#ifndef MRB_NO_FLOAT
|
|
89
114
|
static double
|
|
90
115
|
rand_real(rand_state *t)
|
|
91
116
|
{
|
|
92
117
|
uint32_t x = rand_uint32(t);
|
|
93
|
-
return x*(1.0/
|
|
118
|
+
return x*(1.0/4294967296.0);
|
|
94
119
|
}
|
|
95
120
|
#endif
|
|
96
121
|
|
|
@@ -99,15 +124,15 @@ random_rand(mrb_state *mrb, rand_state *t, mrb_value max)
|
|
|
99
124
|
{
|
|
100
125
|
mrb_value value;
|
|
101
126
|
|
|
102
|
-
if (
|
|
103
|
-
#ifndef
|
|
127
|
+
if (mrb_integer(max) == 0) {
|
|
128
|
+
#ifndef MRB_NO_FLOAT
|
|
104
129
|
value = mrb_float_value(mrb, rand_real(t));
|
|
105
130
|
#else
|
|
106
131
|
mrb_raise(mrb, E_ARGUMENT_ERROR, "Float not supported");
|
|
107
132
|
#endif
|
|
108
133
|
}
|
|
109
134
|
else {
|
|
110
|
-
value =
|
|
135
|
+
value = mrb_int_value(mrb, rand_uint32(t) % mrb_integer(max));
|
|
111
136
|
}
|
|
112
137
|
|
|
113
138
|
return value;
|
|
@@ -125,7 +150,7 @@ get_opt(mrb_state* mrb)
|
|
|
125
150
|
mrb_int i;
|
|
126
151
|
|
|
127
152
|
arg = mrb_to_int(mrb, arg);
|
|
128
|
-
i =
|
|
153
|
+
i = mrb_integer(arg);
|
|
129
154
|
if (i < 0) {
|
|
130
155
|
arg = mrb_fixnum_value(0 - i);
|
|
131
156
|
}
|
|
@@ -135,7 +160,7 @@ get_opt(mrb_state* mrb)
|
|
|
135
160
|
|
|
136
161
|
static void
|
|
137
162
|
random_check(mrb_state *mrb, mrb_value random) {
|
|
138
|
-
struct RClass *c =
|
|
163
|
+
struct RClass *c = mrb_class_get_id(mrb, MRB_SYM(Random));
|
|
139
164
|
if (!mrb_obj_is_kind_of(mrb, random, c) || !mrb_istruct_p(random)) {
|
|
140
165
|
mrb_raise(mrb, E_TYPE_ERROR, "Random instance required");
|
|
141
166
|
}
|
|
@@ -144,7 +169,7 @@ random_check(mrb_state *mrb, mrb_value random) {
|
|
|
144
169
|
static mrb_value
|
|
145
170
|
random_default(mrb_state *mrb) {
|
|
146
171
|
struct RClass *c = mrb_class_get(mrb, "Random");
|
|
147
|
-
mrb_value d = mrb_const_get(mrb, mrb_obj_value(c),
|
|
172
|
+
mrb_value d = mrb_const_get(mrb, mrb_obj_value(c), MRB_SYM(DEFAULT));
|
|
148
173
|
if (!mrb_obj_is_kind_of(mrb, d, c)) {
|
|
149
174
|
mrb_raise(mrb, E_TYPE_ERROR, "Random::DEFAULT replaced");
|
|
150
175
|
}
|
|
@@ -167,7 +192,7 @@ random_m_init(mrb_state *mrb, mrb_value self)
|
|
|
167
192
|
rand_init(t);
|
|
168
193
|
}
|
|
169
194
|
else {
|
|
170
|
-
rand_seed(t, (uint32_t)
|
|
195
|
+
rand_seed(t, (uint32_t)mrb_integer(seed));
|
|
171
196
|
}
|
|
172
197
|
|
|
173
198
|
return self;
|
|
@@ -196,11 +221,11 @@ random_m_srand(mrb_state *mrb, mrb_value self)
|
|
|
196
221
|
seed = (uint32_t)time(NULL) + rand_uint32(t);
|
|
197
222
|
}
|
|
198
223
|
else {
|
|
199
|
-
seed = (uint32_t)
|
|
224
|
+
seed = (uint32_t)mrb_integer(sv);
|
|
200
225
|
}
|
|
201
226
|
old_seed = rand_seed(t, seed);
|
|
202
227
|
|
|
203
|
-
return
|
|
228
|
+
return mrb_int_value(mrb, (mrb_int)old_seed);
|
|
204
229
|
}
|
|
205
230
|
|
|
206
231
|
/*
|
|
@@ -218,6 +243,34 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary)
|
|
|
218
243
|
mrb_value r = mrb_nil_value();
|
|
219
244
|
rand_state *random;
|
|
220
245
|
|
|
246
|
+
/*
|
|
247
|
+
* MSC compiler bug generating invalid instructions with optimization
|
|
248
|
+
* enabled. MSC errantly uses a hardcoded value with optimizations on
|
|
249
|
+
* when using a fixed value from a union.
|
|
250
|
+
* Creating a temp volatile variable and reassigning back to the original
|
|
251
|
+
* value tricks the compiler to not perform this optimization;
|
|
252
|
+
*/
|
|
253
|
+
#if defined _MSC_VER && _MSC_VER >= 1923
|
|
254
|
+
/* C++ will not cast away volatile easily, so we cannot do something like
|
|
255
|
+
* volatile mrb_value rr = r; r = (mrb_value)rr; with C++.
|
|
256
|
+
* That cast does work with C.
|
|
257
|
+
* We also have to trick the compiler to not optimize away the const_cast entirely
|
|
258
|
+
* by creating and manipulating an intermediate volatile pointer.
|
|
259
|
+
*/
|
|
260
|
+
volatile mrb_value *v_r;
|
|
261
|
+
volatile mrb_int ii;
|
|
262
|
+
mrb_value *p_r;
|
|
263
|
+
v_r = &r;
|
|
264
|
+
ii = 2;
|
|
265
|
+
v_r = v_r + 2;
|
|
266
|
+
#if defined __cplusplus
|
|
267
|
+
p_r = const_cast<mrb_value*>(v_r - ii);
|
|
268
|
+
#else
|
|
269
|
+
p_r = (mrb_value*)v_r - ii;
|
|
270
|
+
#endif
|
|
271
|
+
r = *p_r;
|
|
272
|
+
#endif
|
|
273
|
+
|
|
221
274
|
if (RARRAY_LEN(ary) > 1) {
|
|
222
275
|
mrb_get_args(mrb, "|o", &r);
|
|
223
276
|
|
|
@@ -235,7 +288,7 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary)
|
|
|
235
288
|
mrb_value *ptr = RARRAY_PTR(ary);
|
|
236
289
|
mrb_value tmp;
|
|
237
290
|
|
|
238
|
-
j =
|
|
291
|
+
j = mrb_integer(random_rand(mrb, random, max));
|
|
239
292
|
|
|
240
293
|
tmp = ptr[i];
|
|
241
294
|
ptr[i] = ptr[j];
|
|
@@ -320,16 +373,18 @@ mrb_ary_sample(mrb_state *mrb, mrb_value ary)
|
|
|
320
373
|
r = (mrb_int)(rand_uint32(random) % len);
|
|
321
374
|
|
|
322
375
|
for (j=0; j<i; j++) {
|
|
323
|
-
if (
|
|
376
|
+
if (mrb_integer(RARRAY_PTR(result)[j]) == r) {
|
|
324
377
|
goto retry; /* retry if duplicate */
|
|
325
378
|
}
|
|
326
379
|
}
|
|
327
380
|
break;
|
|
328
381
|
}
|
|
329
|
-
mrb_ary_push(mrb, result,
|
|
382
|
+
mrb_ary_push(mrb, result, mrb_int_value(mrb, r));
|
|
330
383
|
}
|
|
331
384
|
for (i=0; i<n; i++) {
|
|
332
|
-
|
|
385
|
+
mrb_int idx = mrb_integer(RARRAY_PTR(result)[i]);
|
|
386
|
+
mrb_value elem = RARRAY_PTR(ary)[idx];
|
|
387
|
+
mrb_ary_set(mrb, result, i, elem);
|
|
333
388
|
}
|
|
334
389
|
return result;
|
|
335
390
|
}
|
|
@@ -355,7 +410,7 @@ void mrb_mruby_random_gem_init(mrb_state *mrb)
|
|
|
355
410
|
struct RClass *random;
|
|
356
411
|
struct RClass *array = mrb->array_class;
|
|
357
412
|
|
|
358
|
-
|
|
413
|
+
mrb_static_assert1(sizeof(rand_state) <= ISTRUCT_DATA_SIZE);
|
|
359
414
|
|
|
360
415
|
mrb_define_method(mrb, mrb->kernel_module, "rand", random_f_rand, MRB_ARGS_OPT(1));
|
|
361
416
|
mrb_define_method(mrb, mrb->kernel_module, "srand", random_f_srand, MRB_ARGS_OPT(1));
|
|
@@ -373,7 +428,7 @@ void mrb_mruby_random_gem_init(mrb_state *mrb)
|
|
|
373
428
|
mrb_define_method(mrb, array, "shuffle!", mrb_ary_shuffle_bang, MRB_ARGS_OPT(1));
|
|
374
429
|
mrb_define_method(mrb, array, "sample", mrb_ary_sample, MRB_ARGS_OPT(2));
|
|
375
430
|
|
|
376
|
-
mrb_const_set(mrb, mrb_obj_value(random),
|
|
431
|
+
mrb_const_set(mrb, mrb_obj_value(random), MRB_SYM(DEFAULT),
|
|
377
432
|
mrb_obj_new(mrb, random, 0, NULL));
|
|
378
433
|
}
|
|
379
434
|
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
assert("return class of Kernel.rand") do
|
|
35
|
-
assert_kind_of(
|
|
36
|
-
assert_kind_of(
|
|
35
|
+
assert_kind_of(Integer, rand(3))
|
|
36
|
+
assert_kind_of(Integer, rand(1.5))
|
|
37
37
|
assert_kind_of(Float, rand)
|
|
38
38
|
assert_kind_of(Float, rand(0.5))
|
|
39
39
|
end
|
|
@@ -11,6 +11,7 @@ class Range
|
|
|
11
11
|
# (10..20).first(3) #=> [10, 11, 12]
|
|
12
12
|
#
|
|
13
13
|
def first(*args)
|
|
14
|
+
raise RangeError, "cannot get the first element of beginless range" if self.begin.nil?
|
|
14
15
|
return self.begin if args.empty?
|
|
15
16
|
|
|
16
17
|
raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1
|
|
@@ -26,14 +27,42 @@ def first(*args)
|
|
|
26
27
|
ary
|
|
27
28
|
end
|
|
28
29
|
|
|
30
|
+
##
|
|
31
|
+
# call-seq:
|
|
32
|
+
# rng.last -> obj
|
|
33
|
+
# rng.last(n) -> an_array
|
|
34
|
+
#
|
|
35
|
+
# Returns the last object in the range,
|
|
36
|
+
# or an array of the last +n+ elements.
|
|
37
|
+
#
|
|
38
|
+
# Note that with no arguments +last+ will return the object that defines
|
|
39
|
+
# the end of the range even if #exclude_end? is +true+.
|
|
40
|
+
#
|
|
41
|
+
# (10..20).last #=> 20
|
|
42
|
+
# (10...20).last #=> 20
|
|
43
|
+
# (10..20).last(3) #=> [18, 19, 20]
|
|
44
|
+
# (10...20).last(3) #=> [17, 18, 19]
|
|
45
|
+
def last(*args)
|
|
46
|
+
raise RangeError, "cannot get the last element of endless range" if self.end.nil?
|
|
47
|
+
return self.end if args.empty?
|
|
48
|
+
|
|
49
|
+
raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1
|
|
50
|
+
nv = args[0]
|
|
51
|
+
n = nv.__to_int
|
|
52
|
+
raise ArgumentError, "negative array size (or size too big)" unless 0 <= n
|
|
53
|
+
return self.to_a.last(nv)
|
|
54
|
+
end
|
|
55
|
+
|
|
29
56
|
def max(&block)
|
|
30
|
-
val = self.
|
|
31
|
-
last = self.
|
|
57
|
+
val = self.begin
|
|
58
|
+
last = self.end
|
|
32
59
|
return super if block
|
|
33
60
|
|
|
61
|
+
raise RangeError, "cannot get the maximum of endless range" if last.nil?
|
|
62
|
+
|
|
34
63
|
# fast path for numerics
|
|
35
64
|
if val.kind_of?(Numeric) && last.kind_of?(Numeric)
|
|
36
|
-
raise TypeError if exclude_end? && !last.kind_of?(
|
|
65
|
+
raise TypeError if exclude_end? && !last.kind_of?(Integer)
|
|
37
66
|
return nil if val > last
|
|
38
67
|
return nil if val == last && exclude_end?
|
|
39
68
|
|
|
@@ -47,9 +76,13 @@ def max(&block)
|
|
|
47
76
|
end
|
|
48
77
|
|
|
49
78
|
def min(&block)
|
|
50
|
-
val = self.
|
|
51
|
-
last = self.
|
|
52
|
-
|
|
79
|
+
val = self.begin
|
|
80
|
+
last = self.end
|
|
81
|
+
if block
|
|
82
|
+
raise RangeError, "cannot get the minimum of endless range with custom comparison method" if last.nil?
|
|
83
|
+
return super
|
|
84
|
+
end
|
|
85
|
+
return val if last.nil?
|
|
53
86
|
|
|
54
87
|
# fast path for numerics
|
|
55
88
|
if val.kind_of?(Numeric) && last.kind_of?(Numeric)
|