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
|
@@ -42,6 +42,9 @@ range_cover(mrb_state *mrb, mrb_value range)
|
|
|
42
42
|
end = RANGE_END(r);
|
|
43
43
|
|
|
44
44
|
if (r_le(mrb, beg, val)) {
|
|
45
|
+
if (mrb_nil_p(end)) {
|
|
46
|
+
return mrb_true_value();
|
|
47
|
+
}
|
|
45
48
|
if (RANGE_EXCL(r)) {
|
|
46
49
|
if (r_lt(mrb, val, end))
|
|
47
50
|
return mrb_true_value();
|
|
@@ -55,36 +58,6 @@ range_cover(mrb_state *mrb, mrb_value range)
|
|
|
55
58
|
return mrb_false_value();
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
/*
|
|
59
|
-
* call-seq:
|
|
60
|
-
* rng.last -> obj
|
|
61
|
-
* rng.last(n) -> an_array
|
|
62
|
-
*
|
|
63
|
-
* Returns the last object in the range,
|
|
64
|
-
* or an array of the last +n+ elements.
|
|
65
|
-
*
|
|
66
|
-
* Note that with no arguments +last+ will return the object that defines
|
|
67
|
-
* the end of the range even if #exclude_end? is +true+.
|
|
68
|
-
*
|
|
69
|
-
* (10..20).last #=> 20
|
|
70
|
-
* (10...20).last #=> 20
|
|
71
|
-
* (10..20).last(3) #=> [18, 19, 20]
|
|
72
|
-
* (10...20).last(3) #=> [17, 18, 19]
|
|
73
|
-
*/
|
|
74
|
-
static mrb_value
|
|
75
|
-
range_last(mrb_state *mrb, mrb_value range)
|
|
76
|
-
{
|
|
77
|
-
mrb_value num;
|
|
78
|
-
mrb_value array;
|
|
79
|
-
|
|
80
|
-
if (mrb_get_args(mrb, "|o", &num) == 0) {
|
|
81
|
-
return mrb_range_end(mrb, range);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
array = mrb_funcall(mrb, range, "to_a", 0);
|
|
85
|
-
return mrb_funcall(mrb, array, "last", 1, mrb_to_int(mrb, num));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
61
|
/*
|
|
89
62
|
* call-seq:
|
|
90
63
|
* rng.size -> num
|
|
@@ -96,7 +69,7 @@ range_last(mrb_state *mrb, mrb_value range)
|
|
|
96
69
|
* ('a'..'z').size #=> nil
|
|
97
70
|
*/
|
|
98
71
|
|
|
99
|
-
#ifndef
|
|
72
|
+
#ifndef MRB_NO_FLOAT
|
|
100
73
|
static mrb_value
|
|
101
74
|
range_size(mrb_state *mrb, mrb_value range)
|
|
102
75
|
{
|
|
@@ -108,9 +81,13 @@ range_size(mrb_state *mrb, mrb_value range)
|
|
|
108
81
|
|
|
109
82
|
beg = RANGE_BEG(r);
|
|
110
83
|
end = RANGE_END(r);
|
|
84
|
+
if ((mrb_fixnum_p(beg) || mrb_float_p(beg)) && mrb_nil_p(end)) {
|
|
85
|
+
return mrb_float_value(mrb, INFINITY);
|
|
86
|
+
}
|
|
87
|
+
|
|
111
88
|
excl = RANGE_EXCL(r);
|
|
112
|
-
if (
|
|
113
|
-
beg_f = (mrb_float)
|
|
89
|
+
if (mrb_integer_p(beg)) {
|
|
90
|
+
beg_f = (mrb_float)mrb_integer(beg);
|
|
114
91
|
}
|
|
115
92
|
else if (mrb_float_p(beg)) {
|
|
116
93
|
beg_f = mrb_float(beg);
|
|
@@ -118,8 +95,8 @@ range_size(mrb_state *mrb, mrb_value range)
|
|
|
118
95
|
else {
|
|
119
96
|
num_p = FALSE;
|
|
120
97
|
}
|
|
121
|
-
if (
|
|
122
|
-
end_f = (mrb_float)
|
|
98
|
+
if (mrb_integer_p(end)) {
|
|
99
|
+
end_f = (mrb_float)mrb_integer(end);
|
|
123
100
|
}
|
|
124
101
|
else if (mrb_float_p(end)) {
|
|
125
102
|
end_f = mrb_float(end);
|
|
@@ -159,18 +136,22 @@ range_size(mrb_state *mrb, mrb_value range)
|
|
|
159
136
|
|
|
160
137
|
beg = RANGE_BEG(r);
|
|
161
138
|
end = RANGE_END(r);
|
|
139
|
+
if (mrb_fixnum_p(beg) && mrb_nil_p(end)) {
|
|
140
|
+
return mrb_nil_value();
|
|
141
|
+
}
|
|
142
|
+
|
|
162
143
|
excl = RANGE_EXCL(r) ? 0 : 1;
|
|
163
144
|
|
|
164
|
-
if (
|
|
165
|
-
mrb_int a =
|
|
166
|
-
mrb_int b =
|
|
145
|
+
if (mrb_integer_p(beg) && mrb_integer_p(end)) {
|
|
146
|
+
mrb_int a = mrb_integer(beg);
|
|
147
|
+
mrb_int b = mrb_integer(end);
|
|
167
148
|
mrb_int c = b - a + excl;
|
|
168
149
|
|
|
169
150
|
return mrb_fixnum_value(c);
|
|
170
151
|
}
|
|
171
152
|
return mrb_nil_value();
|
|
172
153
|
}
|
|
173
|
-
#endif /*
|
|
154
|
+
#endif /* MRB_NO_FLOAT */
|
|
174
155
|
|
|
175
156
|
void
|
|
176
157
|
mrb_mruby_range_ext_gem_init(mrb_state* mrb)
|
|
@@ -178,7 +159,6 @@ mrb_mruby_range_ext_gem_init(mrb_state* mrb)
|
|
|
178
159
|
struct RClass * s = mrb_class_get(mrb, "Range");
|
|
179
160
|
|
|
180
161
|
mrb_define_method(mrb, s, "cover?", range_cover, MRB_ARGS_REQ(1));
|
|
181
|
-
mrb_define_method(mrb, s, "last", range_last, MRB_ARGS_OPT(1));
|
|
182
162
|
mrb_define_method(mrb, s, "size", range_size, MRB_ARGS_NONE());
|
|
183
163
|
}
|
|
184
164
|
|
|
@@ -5,11 +5,17 @@
|
|
|
5
5
|
assert_true ("a".."z").cover?("c")
|
|
6
6
|
assert_true !("a".."z").cover?("5")
|
|
7
7
|
assert_true ("a".."z").cover?("cc")
|
|
8
|
+
assert_true ("a"..).cover?("c")
|
|
9
|
+
assert_false ("a"..).cover?("5")
|
|
10
|
+
assert_true ("a"..).cover?("cc")
|
|
8
11
|
end
|
|
9
12
|
|
|
10
13
|
assert('Range#first') do
|
|
11
14
|
assert_equal 10, (10..20).first
|
|
12
15
|
assert_equal [10, 11, 12], (10..20).first(3)
|
|
16
|
+
assert_equal 10, (10..).first
|
|
17
|
+
assert_equal [10, 11, 12], (10..).first(3)
|
|
18
|
+
assert_raise(RangeError) { (..1).first }
|
|
13
19
|
|
|
14
20
|
skip unless Object.const_defined?(:Float)
|
|
15
21
|
assert_equal [0, 1, 2], (0..Float::INFINITY).first(3)
|
|
@@ -18,6 +24,8 @@
|
|
|
18
24
|
assert('Range#last') do
|
|
19
25
|
assert_equal 20, (10..20).last
|
|
20
26
|
assert_equal 20, (10...20).last
|
|
27
|
+
assert_raise(RangeError) { (10..).last }
|
|
28
|
+
assert_raise(RangeError) { (10...).last }
|
|
21
29
|
assert_equal [18, 19, 20], (10..20).last(3)
|
|
22
30
|
assert_equal [17, 18, 19], (10...20).last(3)
|
|
23
31
|
end
|
|
@@ -26,6 +34,9 @@
|
|
|
26
34
|
assert_equal 42, (1..42).size
|
|
27
35
|
assert_equal 41, (1...42).size
|
|
28
36
|
assert_nil ('a'..'z').size
|
|
37
|
+
assert_nil ('a'..).size
|
|
38
|
+
|
|
39
|
+
assert_nil (1..).size unless Object.const_defined?(:Float)
|
|
29
40
|
|
|
30
41
|
skip unless Object.const_defined?(:Float)
|
|
31
42
|
assert_equal 6, (1...6.3).size
|
|
@@ -33,6 +44,10 @@
|
|
|
33
44
|
assert_equal 5, (1.1...6).size
|
|
34
45
|
assert_equal 15, (1.0..15.9).size
|
|
35
46
|
assert_equal Float::INFINITY, (0..Float::INFINITY).size
|
|
47
|
+
|
|
48
|
+
assert_equal Float::INFINITY, (1..).size
|
|
49
|
+
assert_equal Float::INFINITY, (1...).size
|
|
50
|
+
assert_equal Float::INFINITY, (1.0..).size
|
|
36
51
|
end
|
|
37
52
|
|
|
38
53
|
assert('Range#max') do
|
|
@@ -50,6 +65,10 @@
|
|
|
50
65
|
# returns the endpoint when the endpoint equals the start point and the range is inclusive
|
|
51
66
|
assert_equal 5, (5..5).max
|
|
52
67
|
|
|
68
|
+
# raises RangeError when called on an endless range
|
|
69
|
+
assert_raise(RangeError) { (10..).max }
|
|
70
|
+
assert_raise(RangeError) { (10...).max }
|
|
71
|
+
|
|
53
72
|
skip unless Object.const_defined?(:Float)
|
|
54
73
|
|
|
55
74
|
# returns the maximum value in the Float range when called with no arguments
|
|
@@ -94,26 +113,31 @@
|
|
|
94
113
|
# returns the minimum value in the range when called with no arguments
|
|
95
114
|
assert_equal 1, (1..10).min
|
|
96
115
|
assert_equal 1, (1...10).min
|
|
116
|
+
assert_equal 1, (1..).min
|
|
97
117
|
|
|
98
118
|
# returns nil when the start point is greater than the endpoint
|
|
99
119
|
assert_equal nil, (100..10).min
|
|
100
120
|
|
|
101
121
|
# returns nil when the endpoint equals the start point and the range is exclusive
|
|
102
|
-
assert_equal nil, (5...5).
|
|
122
|
+
assert_equal nil, (5...5).min
|
|
103
123
|
|
|
104
124
|
# returns the endpoint when the endpoint equals the start point and the range is inclusive
|
|
105
|
-
assert_equal 5, (5..5).
|
|
125
|
+
assert_equal 5, (5..5).min
|
|
106
126
|
|
|
107
127
|
skip unless Object.const_defined?(:Float)
|
|
108
128
|
|
|
109
129
|
# returns the minimum value in the Float range when called with no arguments
|
|
110
130
|
assert_equal 303.20, (303.20..908.1111).min
|
|
131
|
+
assert_equal 1, (1.0..).min
|
|
111
132
|
|
|
112
133
|
# returns nil when the start point is greater than the endpoint in a Float range
|
|
113
|
-
assert_equal nil, (3003.20..908.1111).
|
|
134
|
+
assert_equal nil, (3003.20..908.1111).min
|
|
114
135
|
end
|
|
115
136
|
|
|
116
137
|
assert('Range#min given a block') do
|
|
138
|
+
# raise when called with a block in endless range
|
|
139
|
+
assert_raise(RangeError) { (1..).min{} }
|
|
140
|
+
|
|
117
141
|
# passes each pair of values in the range to the block
|
|
118
142
|
acc = []
|
|
119
143
|
(1..10).min do |a, b|
|
|
@@ -47,12 +47,14 @@ def /(rhs)
|
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
+
alias quo /
|
|
51
|
+
|
|
50
52
|
def <=>(rhs)
|
|
51
|
-
|
|
53
|
+
case rhs
|
|
54
|
+
when Integer, Float
|
|
52
55
|
return numerator <=> rhs if denominator == 1
|
|
53
56
|
rhs = Rational(rhs)
|
|
54
57
|
end
|
|
55
|
-
|
|
56
58
|
case rhs
|
|
57
59
|
when Rational
|
|
58
60
|
(numerator * rhs.denominator - denominator * rhs.numerator) <=> 0
|
|
@@ -65,14 +67,13 @@ def <=>(rhs)
|
|
|
65
67
|
|
|
66
68
|
def ==(rhs)
|
|
67
69
|
return true if self.equal?(rhs)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
numerator * rhs.denominator == denominator * rhs.numerator
|
|
73
|
-
else
|
|
74
|
-
rhs == self
|
|
70
|
+
case rhs
|
|
71
|
+
when Integer, Float
|
|
72
|
+
return numerator == rhs if denominator == 1
|
|
73
|
+
when Rational
|
|
74
|
+
return numerator * rhs.denominator == denominator * rhs.numerator
|
|
75
75
|
end
|
|
76
|
+
rhs == self
|
|
76
77
|
end
|
|
77
78
|
end
|
|
78
79
|
|
|
@@ -83,16 +84,9 @@ def to_r
|
|
|
83
84
|
end
|
|
84
85
|
|
|
85
86
|
module Kernel
|
|
86
|
-
def Rational(numerator, denominator = 1)
|
|
87
|
-
a = numerator
|
|
88
|
-
b = denominator
|
|
89
|
-
a, b = b, a % b until b == 0
|
|
90
|
-
Rational._new(numerator.div(a), denominator.div(a))
|
|
91
|
-
end
|
|
92
|
-
|
|
93
87
|
[:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|
|
|
94
88
|
original_operator_name = :"__original_operator_#{op}_rational"
|
|
95
|
-
|
|
89
|
+
Integer.instance_eval do
|
|
96
90
|
alias_method original_operator_name, op
|
|
97
91
|
define_method op do |rhs|
|
|
98
92
|
if rhs.is_a? Rational
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
#include <mruby/class.h>
|
|
3
3
|
#include <mruby/string.h>
|
|
4
4
|
#include <mruby/numeric.h>
|
|
5
|
+
#include <mruby/presym.h>
|
|
5
6
|
|
|
6
7
|
struct mrb_rational {
|
|
7
8
|
mrb_int numerator;
|
|
@@ -60,88 +61,243 @@ static mrb_value
|
|
|
60
61
|
rational_numerator(mrb_state *mrb, mrb_value self)
|
|
61
62
|
{
|
|
62
63
|
struct mrb_rational *p = rational_ptr(mrb, self);
|
|
63
|
-
return
|
|
64
|
+
return mrb_int_value(mrb, p->numerator);
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
static mrb_value
|
|
67
68
|
rational_denominator(mrb_state *mrb, mrb_value self)
|
|
68
69
|
{
|
|
69
70
|
struct mrb_rational *p = rational_ptr(mrb, self);
|
|
70
|
-
return
|
|
71
|
+
return mrb_int_value(mrb, p->denominator);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static void
|
|
75
|
+
rat_overflow(mrb_state *mrb)
|
|
76
|
+
{
|
|
77
|
+
mrb_raise(mrb, E_RANGE_ERROR, "integer overflow in rational");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static void
|
|
81
|
+
rat_zerodiv(mrb_state *mrb)
|
|
82
|
+
{
|
|
83
|
+
mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0 in rational");
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
static mrb_value
|
|
74
87
|
rational_new(mrb_state *mrb, mrb_int numerator, mrb_int denominator)
|
|
75
88
|
{
|
|
76
|
-
struct RClass *c =
|
|
89
|
+
struct RClass *c = mrb_class_get_id(mrb, MRB_SYM(Rational));
|
|
77
90
|
struct mrb_rational *p;
|
|
78
|
-
struct RBasic *rat
|
|
91
|
+
struct RBasic *rat;
|
|
92
|
+
|
|
93
|
+
if (denominator == 0) {
|
|
94
|
+
rat_zerodiv(mrb);
|
|
95
|
+
}
|
|
96
|
+
if (denominator < 0) {
|
|
97
|
+
if (numerator == MRB_INT_MIN || denominator == MRB_INT_MIN) {
|
|
98
|
+
rat_overflow(mrb);
|
|
99
|
+
}
|
|
100
|
+
numerator *= -1;
|
|
101
|
+
denominator *= -1;
|
|
102
|
+
}
|
|
103
|
+
rat = rational_alloc(mrb, c, &p);
|
|
79
104
|
p->numerator = numerator;
|
|
80
105
|
p->denominator = denominator;
|
|
81
106
|
MRB_SET_FROZEN_FLAG(rat);
|
|
82
107
|
return mrb_obj_value(rat);
|
|
83
108
|
}
|
|
84
109
|
|
|
110
|
+
inline static mrb_int
|
|
111
|
+
i_gcd(mrb_int x, mrb_int y)
|
|
112
|
+
{
|
|
113
|
+
mrb_uint u, v, t;
|
|
114
|
+
int shift;
|
|
115
|
+
|
|
116
|
+
if (x < 0)
|
|
117
|
+
x = -x;
|
|
118
|
+
if (y < 0)
|
|
119
|
+
y = -y;
|
|
120
|
+
|
|
121
|
+
if (x == 0)
|
|
122
|
+
return y;
|
|
123
|
+
if (y == 0)
|
|
124
|
+
return x;
|
|
125
|
+
|
|
126
|
+
u = (mrb_uint)x;
|
|
127
|
+
v = (mrb_uint)y;
|
|
128
|
+
for (shift = 0; ((u | v) & 1) == 0; ++shift) {
|
|
129
|
+
u >>= 1;
|
|
130
|
+
v >>= 1;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
while ((u & 1) == 0)
|
|
134
|
+
u >>= 1;
|
|
135
|
+
|
|
136
|
+
do {
|
|
137
|
+
while ((v & 1) == 0)
|
|
138
|
+
v >>= 1;
|
|
139
|
+
|
|
140
|
+
if (u > v) {
|
|
141
|
+
t = v;
|
|
142
|
+
v = u;
|
|
143
|
+
u = t;
|
|
144
|
+
}
|
|
145
|
+
v = v - u;
|
|
146
|
+
} while (v != 0);
|
|
147
|
+
|
|
148
|
+
return (mrb_int)(u << shift);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
static mrb_value
|
|
152
|
+
rational_new_i(mrb_state *mrb, mrb_int n, mrb_int d)
|
|
153
|
+
{
|
|
154
|
+
mrb_int a;
|
|
155
|
+
|
|
156
|
+
if (d == 0) {
|
|
157
|
+
rat_zerodiv(mrb);
|
|
158
|
+
}
|
|
159
|
+
a = i_gcd(n, d);
|
|
160
|
+
if ((n == MRB_INT_MIN || d == MRB_INT_MIN) && a == -1) {
|
|
161
|
+
rat_overflow(mrb);
|
|
162
|
+
}
|
|
163
|
+
return rational_new(mrb, n/a, d/a);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
#ifndef MRB_NO_FLOAT
|
|
167
|
+
#include <math.h>
|
|
168
|
+
|
|
169
|
+
#if defined(MRB_INT32) || defined(MRB_USE_FLOAT32)
|
|
170
|
+
#define frexp_rat(x,exp) frexpf((float)x, exp)
|
|
171
|
+
#define ldexp_rat(x,exp) ldexpf((float)x, exp)
|
|
172
|
+
#define RAT_MANT_DIG FLT_MANT_DIG
|
|
173
|
+
#define RAT_INT_LIMIT 30
|
|
174
|
+
#define RAT_HUGE_VAL HUGE_VALF
|
|
175
|
+
#else
|
|
176
|
+
#define frexp_rat frexp
|
|
177
|
+
#define ldexp_rat ldexp
|
|
178
|
+
#define RAT_MANT_DIG DBL_MANT_DIG
|
|
179
|
+
#define RAT_INT_LIMIT 62
|
|
180
|
+
#define RAT_HUGE_VAL HUGE_VAL
|
|
181
|
+
#endif
|
|
182
|
+
|
|
183
|
+
static void
|
|
184
|
+
float_decode_internal(mrb_state *mrb, mrb_float f, mrb_float *rf, int *n)
|
|
185
|
+
{
|
|
186
|
+
f = (mrb_float)frexp_rat(f, n);
|
|
187
|
+
if (isinf(f)) rat_overflow(mrb);
|
|
188
|
+
f = (mrb_float)ldexp_rat(f, RAT_MANT_DIG);
|
|
189
|
+
*n -= RAT_MANT_DIG;
|
|
190
|
+
*rf = f;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
|
|
194
|
+
|
|
195
|
+
static mrb_value
|
|
196
|
+
rational_new_f(mrb_state *mrb, mrb_float f0)
|
|
197
|
+
{
|
|
198
|
+
mrb_float f;
|
|
199
|
+
int n;
|
|
200
|
+
|
|
201
|
+
mrb_check_num_exact(mrb, f0);
|
|
202
|
+
float_decode_internal(mrb, f0, &f, &n);
|
|
203
|
+
#if FLT_RADIX == 2
|
|
204
|
+
if (n == 0)
|
|
205
|
+
return rational_new(mrb, (mrb_int)f, 1);
|
|
206
|
+
if (n > 0) {
|
|
207
|
+
f = ldexp_rat(f, n);
|
|
208
|
+
if (f == RAT_HUGE_VAL || f > (mrb_float)MRB_INT_MAX) {
|
|
209
|
+
rat_overflow(mrb);
|
|
210
|
+
}
|
|
211
|
+
return rational_new(mrb, (mrb_uint)f, 1);
|
|
212
|
+
}
|
|
213
|
+
if (n < -RAT_INT_LIMIT) {
|
|
214
|
+
f = ldexp_rat(f, n+RAT_INT_LIMIT);
|
|
215
|
+
n = RAT_INT_LIMIT;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
n = -n;
|
|
219
|
+
}
|
|
220
|
+
return rational_new_i(mrb, (mrb_int)f, ((mrb_int)1)<<n);
|
|
221
|
+
#else
|
|
222
|
+
mrb_int pow = 1;
|
|
223
|
+
if (n < 0) {
|
|
224
|
+
n = -n;
|
|
225
|
+
while (n > RAT_INT_LIMIT) {
|
|
226
|
+
f /= 2;
|
|
227
|
+
n--;
|
|
228
|
+
}
|
|
229
|
+
while (n--) {
|
|
230
|
+
pow *= FLT_RADIX;
|
|
231
|
+
}
|
|
232
|
+
return rational_new_i(mrb, f, pow);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
while (n--) {
|
|
236
|
+
if (MRB_INT_MAX/FLT_RADIX < pow) {
|
|
237
|
+
rat_overflow(mrb);
|
|
238
|
+
}
|
|
239
|
+
pow *= FLT_RADIX;
|
|
240
|
+
}
|
|
241
|
+
return rational_new(mrb, (mrb_int)f*pow, 1);
|
|
242
|
+
}
|
|
243
|
+
#endif
|
|
244
|
+
}
|
|
245
|
+
#endif
|
|
246
|
+
|
|
85
247
|
static mrb_value
|
|
86
248
|
rational_s_new(mrb_state *mrb, mrb_value self)
|
|
87
249
|
{
|
|
88
250
|
mrb_int numerator, denominator;
|
|
89
251
|
|
|
90
|
-
#ifdef
|
|
252
|
+
#ifdef MRB_NO_FLOAT
|
|
91
253
|
mrb_get_args(mrb, "ii", &numerator, &denominator);
|
|
92
254
|
#else
|
|
93
255
|
|
|
94
|
-
|
|
95
|
-
do { \
|
|
96
|
-
while (f < (mrb_float)MRB_INT_MIN || f > (mrb_float)MRB_INT_MAX) { \
|
|
97
|
-
num /= 2; \
|
|
98
|
-
denom /= 2; \
|
|
99
|
-
} \
|
|
100
|
-
} while (0)
|
|
101
|
-
|
|
102
|
-
mrb_value numv, denomv;
|
|
256
|
+
mrb_value numv, denomv;
|
|
103
257
|
|
|
104
258
|
mrb_get_args(mrb, "oo", &numv, &denomv);
|
|
105
|
-
if (
|
|
106
|
-
numerator =
|
|
259
|
+
if (mrb_integer_p(numv)) {
|
|
260
|
+
numerator = mrb_integer(numv);
|
|
107
261
|
|
|
108
|
-
if (
|
|
109
|
-
denominator =
|
|
262
|
+
if (mrb_integer_p(denomv)) {
|
|
263
|
+
denominator = mrb_integer(denomv);
|
|
110
264
|
}
|
|
111
265
|
else {
|
|
266
|
+
mrb_float numf = (mrb_float)numerator;
|
|
112
267
|
mrb_float denomf = mrb_to_flo(mrb, denomv);
|
|
113
268
|
|
|
114
|
-
|
|
115
|
-
denominator = (mrb_int)denomf;
|
|
269
|
+
return rational_new_f(mrb, numf/denomf);
|
|
116
270
|
}
|
|
117
271
|
}
|
|
118
272
|
else {
|
|
119
273
|
mrb_float numf = mrb_to_flo(mrb, numv);
|
|
274
|
+
mrb_float denomf;
|
|
120
275
|
|
|
121
|
-
if (
|
|
122
|
-
|
|
276
|
+
if (mrb_integer_p(denomv)) {
|
|
277
|
+
denomf = (mrb_float)mrb_integer(denomv);
|
|
123
278
|
}
|
|
124
279
|
else {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
DROP_PRECISION(denomf, numf, denomf);
|
|
128
|
-
denominator = (mrb_int)denomf;
|
|
280
|
+
denomf = mrb_to_flo(mrb, denomv);
|
|
129
281
|
}
|
|
130
|
-
|
|
131
|
-
DROP_PRECISION(numf, numf, denominator);
|
|
132
|
-
numerator = (mrb_int)numf;
|
|
282
|
+
return rational_new_f(mrb, numf/denomf);
|
|
133
283
|
}
|
|
134
284
|
#endif
|
|
135
|
-
|
|
136
285
|
return rational_new(mrb, numerator, denominator);
|
|
137
286
|
}
|
|
138
287
|
|
|
139
|
-
#ifndef
|
|
288
|
+
#ifndef MRB_NO_FLOAT
|
|
140
289
|
static mrb_value
|
|
141
290
|
rational_to_f(mrb_state *mrb, mrb_value self)
|
|
142
291
|
{
|
|
143
292
|
struct mrb_rational *p = rational_ptr(mrb, self);
|
|
144
|
-
mrb_float f
|
|
293
|
+
mrb_float f;
|
|
294
|
+
|
|
295
|
+
if (p->denominator == 0.0) {
|
|
296
|
+
f = INFINITY;
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
f = (mrb_float)p->numerator / (mrb_float)p->denominator;
|
|
300
|
+
}
|
|
145
301
|
|
|
146
302
|
return mrb_float_value(mrb, f);
|
|
147
303
|
}
|
|
@@ -152,9 +308,9 @@ rational_to_i(mrb_state *mrb, mrb_value self)
|
|
|
152
308
|
{
|
|
153
309
|
struct mrb_rational *p = rational_ptr(mrb, self);
|
|
154
310
|
if (p->denominator == 0) {
|
|
155
|
-
|
|
311
|
+
rat_zerodiv(mrb);
|
|
156
312
|
}
|
|
157
|
-
return
|
|
313
|
+
return mrb_int_value(mrb, p->numerator / p->denominator);
|
|
158
314
|
}
|
|
159
315
|
|
|
160
316
|
static mrb_value
|
|
@@ -176,14 +332,35 @@ rational_negative_p(mrb_state *mrb, mrb_value self)
|
|
|
176
332
|
static mrb_value
|
|
177
333
|
fix_to_r(mrb_state *mrb, mrb_value self)
|
|
178
334
|
{
|
|
179
|
-
return rational_new(mrb,
|
|
335
|
+
return rational_new(mrb, mrb_integer(self), 1);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
static mrb_value
|
|
339
|
+
rational_m(mrb_state *mrb, mrb_value self)
|
|
340
|
+
{
|
|
341
|
+
#ifdef MRB_NO_FLOAT
|
|
342
|
+
mrb_int n, d = 1;
|
|
343
|
+
mrb_get_args(mrb, "i|i", &n, &d);
|
|
344
|
+
return rational_new_i(mrb, n, d);
|
|
345
|
+
#else
|
|
346
|
+
mrb_value a, b = mrb_fixnum_value(1);
|
|
347
|
+
mrb_get_args(mrb, "o|o", &a, &b);
|
|
348
|
+
if (mrb_integer_p(a) && mrb_integer_p(b)) {
|
|
349
|
+
return rational_new_i(mrb, mrb_integer(a), mrb_integer(b));
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
mrb_float x = mrb_to_flo(mrb, a);
|
|
353
|
+
mrb_float y = mrb_to_flo(mrb, b);
|
|
354
|
+
return rational_new_f(mrb, x/y);
|
|
355
|
+
}
|
|
356
|
+
#endif
|
|
180
357
|
}
|
|
181
358
|
|
|
182
359
|
void mrb_mruby_rational_gem_init(mrb_state *mrb)
|
|
183
360
|
{
|
|
184
361
|
struct RClass *rat;
|
|
185
362
|
|
|
186
|
-
rat =
|
|
363
|
+
rat = mrb_define_class_id(mrb, MRB_SYM(Rational), mrb_class_get_id(mrb, MRB_SYM(Numeric)));
|
|
187
364
|
#ifdef RATIONAL_USE_ISTRUCT
|
|
188
365
|
MRB_SET_INSTANCE_TT(rat, MRB_TT_ISTRUCT);
|
|
189
366
|
mrb_assert(sizeof(struct mrb_rational) < ISTRUCT_DATA_SIZE);
|
|
@@ -194,13 +371,14 @@ void mrb_mruby_rational_gem_init(mrb_state *mrb)
|
|
|
194
371
|
mrb_define_class_method(mrb, rat, "_new", rational_s_new, MRB_ARGS_REQ(2));
|
|
195
372
|
mrb_define_method(mrb, rat, "numerator", rational_numerator, MRB_ARGS_NONE());
|
|
196
373
|
mrb_define_method(mrb, rat, "denominator", rational_denominator, MRB_ARGS_NONE());
|
|
197
|
-
#ifndef
|
|
374
|
+
#ifndef MRB_NO_FLOAT
|
|
198
375
|
mrb_define_method(mrb, rat, "to_f", rational_to_f, MRB_ARGS_NONE());
|
|
199
376
|
#endif
|
|
200
377
|
mrb_define_method(mrb, rat, "to_i", rational_to_i, MRB_ARGS_NONE());
|
|
201
378
|
mrb_define_method(mrb, rat, "to_r", rational_to_r, MRB_ARGS_NONE());
|
|
202
379
|
mrb_define_method(mrb, rat, "negative?", rational_negative_p, MRB_ARGS_NONE());
|
|
203
|
-
mrb_define_method(mrb, mrb->
|
|
380
|
+
mrb_define_method(mrb, mrb->integer_class, "to_r", fix_to_r, MRB_ARGS_NONE());
|
|
381
|
+
mrb_define_method(mrb, mrb->kernel_module, "Rational", rational_m, MRB_ARGS_ARG(1,1));
|
|
204
382
|
}
|
|
205
383
|
|
|
206
384
|
void
|