script_core 0.2.3 → 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/.rubocop.yml +35 -57
- data/.ruby-version +1 -1
- data/Gemfile +2 -2
- data/README.md +7 -1
- data/ext/enterprise_script_service/Rakefile +1 -1
- data/ext/enterprise_script_service/libseccomp/.travis.yml +24 -12
- data/ext/enterprise_script_service/libseccomp/CHANGELOG +32 -0
- data/ext/enterprise_script_service/libseccomp/CONTRIBUTING.md +37 -26
- data/ext/enterprise_script_service/libseccomp/CREDITS +11 -0
- data/ext/enterprise_script_service/libseccomp/README.md +21 -1
- data/ext/enterprise_script_service/libseccomp/configure.ac +13 -8
- data/ext/enterprise_script_service/libseccomp/doc/Makefile.am +6 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_api_get.3 +12 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_arch_add.3 +38 -6
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_attr_set.3 +53 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_export_bpf.3 +20 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_init.3 +9 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_load.3 +32 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_merge.3 +16 -2
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_alloc.3 +113 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_fd.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_free.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_id_valid.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_receive.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_notify_respond.3 +1 -0
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_rule_add.3 +64 -3
- data/ext/enterprise_script_service/libseccomp/doc/man/man3/seccomp_syscall_priority.3 +18 -3
- data/ext/enterprise_script_service/libseccomp/include/seccomp-syscalls.h +19 -0
- data/ext/enterprise_script_service/libseccomp/include/seccomp.h.in +116 -0
- data/ext/enterprise_script_service/libseccomp/src/.gitignore +2 -0
- data/ext/enterprise_script_service/libseccomp/src/Makefile.am +31 -17
- data/ext/enterprise_script_service/libseccomp/src/api.c +254 -58
- data/ext/enterprise_script_service/libseccomp/src/arch-aarch64.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch-arm.c +47 -2
- data/ext/enterprise_script_service/libseccomp/src/arch-arm.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch-gperf-generate +40 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-mips.c +41 -4
- data/ext/enterprise_script_service/libseccomp/src/arch-mips.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64.c +41 -4
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64.h +3 -11
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.c +41 -4
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc.h +1 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.c +3 -3
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc64.h +29 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.c +606 -8
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc64.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.c +31 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-riscv64.h +22 -0
- data/ext/enterprise_script_service/libseccomp/src/arch-s390.c +171 -12
- data/ext/enterprise_script_service/libseccomp/src/arch-s390.h +1 -17
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x.c +166 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x.h +1 -20
- data/ext/enterprise_script_service/libseccomp/src/arch-syscall-dump.c +8 -1
- data/ext/enterprise_script_service/libseccomp/src/arch-syscall-validate +359 -143
- data/ext/enterprise_script_service/libseccomp/src/arch-x32.c +36 -2
- data/ext/enterprise_script_service/libseccomp/src/arch-x32.h +2 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-x86.c +172 -10
- data/ext/enterprise_script_service/libseccomp/src/arch-x86.h +1 -14
- data/ext/enterprise_script_service/libseccomp/src/arch-x86_64.h +1 -9
- data/ext/enterprise_script_service/libseccomp/src/arch.c +11 -3
- data/ext/enterprise_script_service/libseccomp/src/arch.h +7 -0
- data/ext/enterprise_script_service/libseccomp/src/db.c +268 -57
- data/ext/enterprise_script_service/libseccomp/src/db.h +16 -2
- data/ext/enterprise_script_service/libseccomp/src/gen_bpf.c +503 -148
- data/ext/enterprise_script_service/libseccomp/src/gen_bpf.h +2 -1
- data/ext/enterprise_script_service/libseccomp/src/gen_pfc.c +165 -37
- data/ext/enterprise_script_service/libseccomp/src/python/libseccomp.pxd +37 -1
- data/ext/enterprise_script_service/libseccomp/src/python/seccomp.pyx +295 -5
- data/ext/enterprise_script_service/libseccomp/src/syscalls.c +56 -0
- data/ext/enterprise_script_service/libseccomp/src/syscalls.csv +470 -0
- data/ext/enterprise_script_service/libseccomp/src/syscalls.h +62 -0
- data/ext/enterprise_script_service/libseccomp/src/syscalls.perf.template +82 -0
- data/ext/enterprise_script_service/libseccomp/src/system.c +196 -16
- data/ext/enterprise_script_service/libseccomp/src/system.h +68 -13
- data/ext/enterprise_script_service/libseccomp/tests/.gitignore +10 -2
- data/ext/enterprise_script_service/libseccomp/tests/06-sim-actions.tests +1 -1
- data/ext/enterprise_script_service/libseccomp/tests/11-basic-basic_errors.c +5 -5
- data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.c +35 -1
- data/ext/enterprise_script_service/libseccomp/tests/13-basic-attrs.py +10 -1
- data/ext/enterprise_script_service/libseccomp/tests/15-basic-resolver.c +4 -3
- data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.c +12 -0
- data/ext/enterprise_script_service/libseccomp/tests/16-sim-arch_basic.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.c → 18-sim-basic_allowlist.c} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/{18-sim-basic_whitelist.py → 18-sim-basic_allowlist.py} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_allowlist.tests +32 -0
- data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tests/23-sim-arch_all_le_basic.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/30-sim-socket_syscalls.tests +33 -17
- data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.c → 34-sim-basic_denylist.c} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/{34-sim-basic_blacklist.py → 34-sim-basic_denylist.py} +0 -0
- data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_denylist.tests +32 -0
- data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.py +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/36-sim-ipc_syscalls.tests +25 -25
- data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.c +24 -3
- data/ext/enterprise_script_service/libseccomp/tests/39-basic-api_level.py +16 -1
- data/ext/enterprise_script_service/libseccomp/tests/47-live-kill_process.c +3 -3
- data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.c +112 -0
- data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.py +60 -0
- data/ext/enterprise_script_service/libseccomp/tests/51-live-user_notification.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.c +48 -0
- data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.py +38 -0
- data/ext/enterprise_script_service/libseccomp/tests/52-basic-load.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.c +156 -0
- data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.py +95 -0
- data/ext/enterprise_script_service/libseccomp/tests/53-sim-binary_tree.tests +65 -0
- data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.c +128 -0
- data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.py +95 -0
- data/ext/enterprise_script_service/libseccomp/tests/54-live-binary_tree.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.c +134 -0
- data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.sh +46 -0
- data/ext/enterprise_script_service/libseccomp/tests/55-basic-pfc_binary_tree.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.c +90 -0
- data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.py +65 -0
- data/ext/enterprise_script_service/libseccomp/tests/56-basic-iterate_syscalls.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.c +64 -0
- data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.py +46 -0
- data/ext/enterprise_script_service/libseccomp/tests/57-basic-rawsysrc.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.c +116 -0
- data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.py +61 -0
- data/ext/enterprise_script_service/libseccomp/tests/58-live-tsync_notify.tests +11 -0
- data/ext/enterprise_script_service/libseccomp/tests/Makefile.am +34 -10
- data/ext/enterprise_script_service/libseccomp/tests/regression +10 -3
- data/ext/enterprise_script_service/libseccomp/tests/util.c +3 -3
- data/ext/enterprise_script_service/libseccomp/tools/Makefile.am +0 -3
- data/ext/enterprise_script_service/libseccomp/tools/check-syntax +1 -1
- data/ext/enterprise_script_service/libseccomp/tools/scmp_arch_detect.c +3 -0
- data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_disasm.c +4 -2
- data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_sim.c +4 -0
- data/ext/enterprise_script_service/libseccomp/tools/util.c +14 -12
- data/ext/enterprise_script_service/libseccomp/tools/util.h +7 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +149 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +55 -0
- 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/.gitignore +3 -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 +7 -10
- data/ext/enterprise_script_service/mruby/.yamllint +8 -0
- data/ext/enterprise_script_service/mruby/AUTHORS +4 -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 +5 -11
- 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 +29 -26
- 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} +4 -21
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +4 -4
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +3 -20
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +4 -21
- 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} +4 -21
- data/ext/enterprise_script_service/mruby/{appveyor_config.rb → build_config/ci/gcc-clang.rb} +11 -8
- 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/build_config/dreamcast_shelf.rb +94 -0
- 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 +142 -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 +53 -30
- 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 +102 -103
- 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 +88 -66
- data/ext/enterprise_script_service/mruby/include/mruby.h +160 -104
- data/ext/enterprise_script_service/mruby/include/mruby/array.h +27 -6
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +80 -46
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +76 -55
- data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
- data/ext/enterprise_script_service/mruby/include/mruby/common.h +14 -1
- data/ext/enterprise_script_service/mruby/include/mruby/compile.h +20 -6
- data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/dump.h +18 -52
- 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 +74 -14
- data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -1
- data/ext/enterprise_script_service/mruby/include/mruby/khash.h +19 -9
- data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +37 -63
- data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
- data/ext/enterprise_script_service/mruby/include/mruby/ops.h +29 -24
- 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 +93 -21
- data/ext/enterprise_script_service/mruby/include/mruby/string.h +12 -16
- data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
- data/ext/enterprise_script_service/mruby/include/mruby/value.h +60 -59
- data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/version.h +25 -6
- data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -72
- data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +71 -78
- 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 +84 -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/lib/mruby/source.rb +3 -1
- 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 -81
- 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 -32
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +10 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/test/array.rb +0 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +30 -18
- 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 -4
- 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 +6 -2
- 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 +46 -35
- 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 +41 -28
- 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 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +26 -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 +6 -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 +7 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +495 -436
- 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 +637 -220
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +13734 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +20 -23
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +9 -9
- 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-error/src/exception.c +3 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +19 -238
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/test/eval.rb +21 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +19 -15
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +31 -5
- 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 +5 -6
- 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 +39 -7
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrbgem.rake +2 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +0 -16
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +9 -14
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +107 -59
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +22 -38
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +417 -203
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +20 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +33 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +58 -50
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +13 -14
- 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 +56 -73
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +13 -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 +80 -78
- 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 +8 -16
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -13
- 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 +120 -67
- 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 +65 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +34 -21
- 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 +21 -43
- 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 +12 -20
- 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 +5 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/test/sockettest.c +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +161 -93
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +9 -25
- 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 +17 -14
- 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 +23 -36
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +7 -6
- 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 +17 -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 +37 -41
- 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/00class.rb +10 -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 +3 -23
- 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 +67 -90
- data/ext/enterprise_script_service/mruby/src/backtrace.c +18 -19
- data/ext/enterprise_script_service/mruby/src/class.c +819 -211
- data/ext/enterprise_script_service/mruby/src/codedump.c +226 -197
- data/ext/enterprise_script_service/mruby/src/debug.c +14 -11
- data/ext/enterprise_script_service/mruby/src/dump.c +470 -207
- data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
- data/ext/enterprise_script_service/mruby/src/error.c +94 -20
- data/ext/enterprise_script_service/mruby/src/etc.c +56 -39
- data/ext/enterprise_script_service/mruby/src/fmt_fp.c +103 -27
- data/ext/enterprise_script_service/mruby/src/gc.c +86 -349
- data/ext/enterprise_script_service/mruby/src/hash.c +1058 -723
- data/ext/enterprise_script_service/mruby/src/kernel.c +78 -226
- data/ext/enterprise_script_service/mruby/src/load.c +215 -159
- data/ext/enterprise_script_service/mruby/src/numeric.c +400 -382
- data/ext/enterprise_script_service/mruby/src/object.c +115 -90
- data/ext/enterprise_script_service/mruby/src/print.c +31 -6
- data/ext/enterprise_script_service/mruby/src/proc.c +56 -45
- data/ext/enterprise_script_service/mruby/src/range.c +49 -33
- data/ext/enterprise_script_service/mruby/src/state.c +58 -42
- data/ext/enterprise_script_service/mruby/src/string.c +151 -156
- data/ext/enterprise_script_service/mruby/src/symbol.c +132 -66
- 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 +655 -645
- 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 +64 -61
- 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/android.rake +46 -1
- data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +8 -7
- data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +13 -17
- data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +21 -25
- data/ext/enterprise_script_service/mruby/test/assert.rb +5 -4
- 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/ensure.rb +8 -26
- data/ext/enterprise_script_service/mruby/test/t/exception.rb +2 -2
- 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 +16 -25
- 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/ext/enterprise_script_service/msgpack/.github/depends/boost.sh +56 -0
- data/ext/enterprise_script_service/msgpack/.github/workflows/coverage.yml +62 -0
- data/ext/enterprise_script_service/msgpack/.github/workflows/gha.yml +304 -0
- data/ext/enterprise_script_service/msgpack/CHANGELOG.md +11 -0
- data/ext/enterprise_script_service/msgpack/CMakeLists.txt +82 -39
- data/ext/enterprise_script_service/msgpack/Files.cmake +22 -12
- data/ext/enterprise_script_service/msgpack/QUICKSTART-C.md +26 -29
- data/ext/enterprise_script_service/msgpack/README.md +3 -2
- data/ext/enterprise_script_service/msgpack/appveyor.yml +6 -2
- data/ext/enterprise_script_service/msgpack/ci/build_cmake.sh +3 -1
- data/ext/enterprise_script_service/msgpack/cmake/CodeCoverage.cmake +55 -0
- data/ext/enterprise_script_service/msgpack/codecov.yml +36 -0
- data/ext/enterprise_script_service/msgpack/example/CMakeLists.txt +9 -5
- data/ext/enterprise_script_service/msgpack/example/boost/CMakeLists.txt +1 -1
- data/ext/enterprise_script_service/msgpack/example/c/CMakeLists.txt +17 -6
- data/ext/enterprise_script_service/msgpack/example/c/boundary.c +296 -0
- data/ext/enterprise_script_service/msgpack/example/c/jsonconv.c +419 -0
- data/ext/enterprise_script_service/msgpack/example/c/simple_c.c +1 -1
- data/ext/enterprise_script_service/msgpack/example/cpp03/CMakeLists.txt +3 -3
- data/ext/enterprise_script_service/msgpack/example/cpp11/CMakeLists.txt +2 -2
- data/ext/enterprise_script_service/msgpack/example/x3/CMakeLists.txt +2 -2
- data/ext/enterprise_script_service/msgpack/include/msgpack/pack.h +24 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/array_ref.hpp +5 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/boost/optional.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp17/vector_byte.hpp +8 -8
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/map.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_char.hpp +8 -8
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/vector_unsigned_char.hpp +8 -8
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/wstring.hpp +4 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v3/unpack.hpp +6 -6
- data/ext/enterprise_script_service/msgpack/include/msgpack/version_master.h +2 -2
- data/ext/enterprise_script_service/msgpack/include/msgpack/zbuffer.h +4 -4
- data/ext/enterprise_script_service/msgpack/make_file_list.sh +38 -11
- data/ext/enterprise_script_service/msgpack/src/vrefbuffer.c +6 -0
- data/ext/enterprise_script_service/msgpack/test/CMakeLists.txt +86 -64
- data/ext/enterprise_script_service/msgpack/test/array_ref.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_fusion.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_optional.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_string_ref.cpp +4 -1
- data/ext/enterprise_script_service/msgpack/test/boost_string_view.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/boost_variant.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/buffer.cpp +4 -47
- data/ext/enterprise_script_service/msgpack/test/buffer_c.cpp +148 -0
- data/ext/enterprise_script_service/msgpack/test/carray.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/cases.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/convert.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/fixint.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/fixint_c.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/fuzz_unpack_pack_fuzzer_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/iterator_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/json.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/limit.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/msgpack_basic.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_c.cpp +159 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_container.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_cpp11.cpp +32 -27
- data/ext/enterprise_script_service/msgpack/test/msgpack_cpp17.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_stream.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_tuple.cpp +4 -1
- data/ext/enterprise_script_service/msgpack/test/msgpack_vref.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_x3_parse.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/object.cpp +4 -1
- data/ext/enterprise_script_service/msgpack/test/object_with_zone.cpp +12 -8
- data/ext/enterprise_script_service/msgpack/test/pack_unpack.cpp +30 -26
- data/ext/enterprise_script_service/msgpack/test/pack_unpack_c.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/raw.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/reference.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/reference_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/reference_wrapper_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/shared_ptr_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/size_equal_only.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/streaming.cpp +8 -4
- data/ext/enterprise_script_service/msgpack/test/streaming_c.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/unique_ptr_cpp11.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/user_class.cpp +16 -12
- data/ext/enterprise_script_service/msgpack/test/version.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/visitor.cpp +4 -0
- data/ext/enterprise_script_service/msgpack/test/zone.cpp +4 -0
- data/lib/script_core/engine.rb +24 -5
- data/lib/script_core/executable.rb +4 -3
- data/lib/script_core/version.rb +1 -1
- data/lib/tasks/script_core.rake +3 -1
- data/script_core.gemspec +1 -2
- data/spec/dummy/app/lib/script_engine.rb +64 -5
- data/spec/script_core_spec.rb +13 -0
- metadata +123 -61
- data/ext/enterprise_script_service/libseccomp/src/arch-aarch64-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/src/arch-arm-syscalls.c +0 -570
- data/ext/enterprise_script_service/libseccomp/src/arch-mips-syscalls.c +0 -562
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64-syscalls.c +0 -562
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32-syscalls.c +0 -562
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc-syscalls.c +0 -542
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc64-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/src/arch-s390-syscalls.c +0 -626
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x-syscalls.c +0 -626
- data/ext/enterprise_script_service/libseccomp/src/arch-x32-syscalls.c +0 -558
- data/ext/enterprise_script_service/libseccomp/src/arch-x86-syscalls.c +0 -692
- data/ext/enterprise_script_service/libseccomp/src/arch-x86_64-syscalls.c +0 -559
- data/ext/enterprise_script_service/libseccomp/tests/18-sim-basic_whitelist.tests +0 -32
- data/ext/enterprise_script_service/libseccomp/tests/34-sim-basic_blacklist.tests +0 -32
- data/ext/enterprise_script_service/mruby/TODO +0 -8
- 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
- data/ext/enterprise_script_service/mruby/travis_config.rb +0 -54
- data/ext/enterprise_script_service/msgpack/.travis.yml +0 -258
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*
|
|
2
|
-
** numeric.c - Numeric, Integer, Float
|
|
2
|
+
** numeric.c - Numeric, Integer, Float class
|
|
3
3
|
**
|
|
4
4
|
** See Copyright Notice in mruby.h
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
#ifndef
|
|
7
|
+
#ifndef MRB_NO_FLOAT
|
|
8
8
|
#include <float.h>
|
|
9
9
|
#include <math.h>
|
|
10
10
|
#endif
|
|
@@ -17,9 +17,10 @@
|
|
|
17
17
|
#include <mruby/numeric.h>
|
|
18
18
|
#include <mruby/string.h>
|
|
19
19
|
#include <mruby/class.h>
|
|
20
|
+
#include <mruby/presym.h>
|
|
20
21
|
|
|
21
|
-
#ifndef
|
|
22
|
-
#ifdef
|
|
22
|
+
#ifndef MRB_NO_FLOAT
|
|
23
|
+
#ifdef MRB_USE_FLOAT32
|
|
23
24
|
#define trunc(f) truncf(f)
|
|
24
25
|
#define floor(f) floorf(f)
|
|
25
26
|
#define ceil(f) ceilf(f)
|
|
@@ -30,30 +31,38 @@
|
|
|
30
31
|
#endif
|
|
31
32
|
#endif
|
|
32
33
|
|
|
33
|
-
#ifndef
|
|
34
|
+
#ifndef MRB_NO_FLOAT
|
|
34
35
|
MRB_API mrb_float
|
|
35
36
|
mrb_to_flo(mrb_state *mrb, mrb_value val)
|
|
36
37
|
{
|
|
37
38
|
switch (mrb_type(val)) {
|
|
38
|
-
case
|
|
39
|
-
return (mrb_float)
|
|
39
|
+
case MRB_TT_INTEGER:
|
|
40
|
+
return (mrb_float)mrb_integer(val);
|
|
40
41
|
case MRB_TT_FLOAT:
|
|
41
42
|
break;
|
|
42
|
-
|
|
43
|
+
case MRB_TT_STRING:
|
|
44
|
+
case MRB_TT_FALSE:
|
|
45
|
+
case MRB_TT_TRUE:
|
|
43
46
|
mrb_raise(mrb, E_TYPE_ERROR, "non float value");
|
|
47
|
+
default:
|
|
48
|
+
val = mrb_type_convert(mrb, val, MRB_TT_FLOAT, MRB_SYM(to_f));
|
|
49
|
+
break;
|
|
44
50
|
}
|
|
45
51
|
return mrb_float(val);
|
|
46
52
|
}
|
|
53
|
+
#endif
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
static void
|
|
56
|
+
int_overflow(mrb_state *mrb, const char *reason)
|
|
50
57
|
{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
mrb_raisef(mrb, E_RANGE_ERROR, "integer overflow in %s", reason);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static void
|
|
62
|
+
int_zerodiv(mrb_state *mrb)
|
|
63
|
+
{
|
|
64
|
+
mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0");
|
|
55
65
|
}
|
|
56
|
-
#endif
|
|
57
66
|
|
|
58
67
|
/*
|
|
59
68
|
* call-seq:
|
|
@@ -65,82 +74,91 @@ mrb_int_value(mrb_state *mrb, mrb_float f)
|
|
|
65
74
|
* 2.0**3 #=> 8.0
|
|
66
75
|
*/
|
|
67
76
|
static mrb_value
|
|
68
|
-
|
|
77
|
+
int_pow(mrb_state *mrb, mrb_value x)
|
|
69
78
|
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
mrb_get_args(mrb, "o", &y);
|
|
76
|
-
if (mrb_fixnum_p(x) && mrb_fixnum_p(y)) {
|
|
77
|
-
/* try ipow() */
|
|
78
|
-
mrb_int base = mrb_fixnum(x);
|
|
79
|
-
mrb_int exp = mrb_fixnum(y);
|
|
80
|
-
mrb_int result = 1;
|
|
79
|
+
mrb_int base = mrb_int(mrb, x);
|
|
80
|
+
mrb_int exp;
|
|
81
|
+
#ifndef MRB_NO_FLOAT
|
|
82
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
83
|
+
mrb_float z;
|
|
81
84
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
if (!mrb_integer_p(y)) {
|
|
86
|
+
mrb_get_args(mrb, "f", &z);
|
|
87
|
+
z = pow((mrb_float)base, z);
|
|
88
|
+
return mrb_float_value(mrb, z);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
mrb_get_args(mrb, "i", &exp);
|
|
92
|
+
z = pow((double)base, (double)exp);
|
|
93
|
+
if (exp < 0 || z < (mrb_float)MRB_INT_MIN || (mrb_float)MRB_INT_MAX < z) {
|
|
94
|
+
return mrb_float_value(mrb, z);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return mrb_int_value(mrb, (mrb_int)z);
|
|
85
98
|
#else
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
exp >>= 1;
|
|
97
|
-
if (exp == 0) break;
|
|
98
|
-
if (mrb_int_mul_overflow(base, base, &base)) {
|
|
99
|
-
#ifndef MRB_WITHOUT_FLOAT
|
|
100
|
-
goto float_pow;
|
|
101
|
-
#endif
|
|
99
|
+
mrb_int result = 1;
|
|
100
|
+
|
|
101
|
+
mrb_get_args(mrb, "i", &exp);
|
|
102
|
+
if (exp < 0) {
|
|
103
|
+
return mrb_fixnum_value(0);
|
|
104
|
+
}
|
|
105
|
+
for (;;) {
|
|
106
|
+
if (exp & 1) {
|
|
107
|
+
if (mrb_int_mul_overflow(result, base, &result)) {
|
|
108
|
+
int_overflow(mrb, "multiplication");
|
|
102
109
|
}
|
|
103
110
|
}
|
|
104
|
-
|
|
111
|
+
exp >>= 1;
|
|
112
|
+
if (exp == 0) break;
|
|
113
|
+
if (mrb_int_mul_overflow(base, base, &base)) {
|
|
114
|
+
int_overflow(mrb, "multiplication");
|
|
115
|
+
}
|
|
105
116
|
}
|
|
106
|
-
|
|
107
|
-
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
108
|
-
#else
|
|
109
|
-
float_pow:
|
|
110
|
-
d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y));
|
|
111
|
-
return mrb_float_value(mrb, d);
|
|
117
|
+
return mrb_int_value(mrb, result);
|
|
112
118
|
#endif
|
|
113
119
|
}
|
|
114
120
|
|
|
115
|
-
static mrb_value
|
|
116
|
-
integral_idiv(mrb_state *mrb, mrb_value x)
|
|
117
|
-
{
|
|
118
|
-
#ifdef MRB_WITHOUT_FLOAT
|
|
119
|
-
mrb_value y;
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
mrb_int
|
|
123
|
+
mrb_num_div_int(mrb_state *mrb, mrb_int x, mrb_int y)
|
|
124
|
+
{
|
|
125
|
+
if (y == 0) {
|
|
126
|
+
int_zerodiv(mrb);
|
|
124
127
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
else if(x == MRB_INT_MIN && y == -1) {
|
|
129
|
+
int_overflow(mrb, "division");
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
mrb_int div = x / y;
|
|
128
133
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
134
|
+
if ((x ^ y) < 0 && x != div * y) {
|
|
135
|
+
div -= 1;
|
|
136
|
+
}
|
|
137
|
+
return div;
|
|
138
|
+
}
|
|
139
|
+
/* not reached */
|
|
140
|
+
return 0;
|
|
132
141
|
}
|
|
133
142
|
|
|
134
143
|
/* 15.2.8.3.4 */
|
|
135
144
|
/* 15.2.9.3.4 */
|
|
136
145
|
/*
|
|
137
146
|
* call-seq:
|
|
138
|
-
*
|
|
147
|
+
* int / other -> int
|
|
139
148
|
*
|
|
140
149
|
* Performs division: the class of the resulting object depends on
|
|
141
150
|
* the class of <code>num</code> and on the magnitude of the
|
|
142
151
|
* result.
|
|
143
152
|
*/
|
|
153
|
+
static mrb_value
|
|
154
|
+
int_div(mrb_state *mrb, mrb_value xv)
|
|
155
|
+
{
|
|
156
|
+
mrb_int y, div;
|
|
157
|
+
|
|
158
|
+
mrb_get_args(mrb, "i", &y);
|
|
159
|
+
div = mrb_num_div_int(mrb, mrb_integer(xv), y);
|
|
160
|
+
return mrb_int_value(mrb, div);
|
|
161
|
+
}
|
|
144
162
|
|
|
145
163
|
/* 15.2.9.3.19(x) */
|
|
146
164
|
/*
|
|
@@ -151,32 +169,35 @@ integral_idiv(mrb_state *mrb, mrb_value x)
|
|
|
151
169
|
*/
|
|
152
170
|
|
|
153
171
|
static mrb_value
|
|
154
|
-
|
|
172
|
+
int_quo(mrb_state *mrb, mrb_value xv)
|
|
155
173
|
{
|
|
156
|
-
#ifdef
|
|
157
|
-
|
|
174
|
+
#ifdef MRB_NO_FLOAT
|
|
175
|
+
mrb_int y;
|
|
158
176
|
|
|
159
|
-
mrb_get_args(mrb, "
|
|
160
|
-
if (
|
|
161
|
-
|
|
177
|
+
mrb_get_args(mrb, "i", &y);
|
|
178
|
+
if (y == 0) {
|
|
179
|
+
int_zerodiv(mrb);
|
|
162
180
|
}
|
|
163
|
-
return mrb_fixnum_value(
|
|
181
|
+
return mrb_fixnum_value(mrb_integer(xv) / y);
|
|
164
182
|
#else
|
|
165
183
|
mrb_float y;
|
|
166
184
|
|
|
167
185
|
mrb_get_args(mrb, "f", &y);
|
|
168
|
-
|
|
186
|
+
if (y == 0) {
|
|
187
|
+
int_zerodiv(mrb);
|
|
188
|
+
}
|
|
189
|
+
return mrb_float_value(mrb, mrb_integer(xv) / y);
|
|
169
190
|
#endif
|
|
170
191
|
}
|
|
171
192
|
|
|
172
193
|
static mrb_value
|
|
173
|
-
|
|
194
|
+
coerce_step_counter(mrb_state *mrb, mrb_value self)
|
|
174
195
|
{
|
|
175
196
|
mrb_value num, step;
|
|
176
197
|
|
|
177
198
|
mrb_get_args(mrb, "oo", &num, &step);
|
|
178
199
|
|
|
179
|
-
#ifndef
|
|
200
|
+
#ifndef MRB_NO_FLOAT
|
|
180
201
|
if (mrb_float_p(self) || mrb_float_p(num) || mrb_float_p(step)) {
|
|
181
202
|
return mrb_Float(mrb, self);
|
|
182
203
|
}
|
|
@@ -185,7 +206,7 @@ integral_coerce_step_counter(mrb_state *mrb, mrb_value self)
|
|
|
185
206
|
return self;
|
|
186
207
|
}
|
|
187
208
|
|
|
188
|
-
#ifndef
|
|
209
|
+
#ifndef MRB_NO_FLOAT
|
|
189
210
|
/********************************************************************
|
|
190
211
|
*
|
|
191
212
|
* Document-class: Float
|
|
@@ -195,41 +216,94 @@ integral_coerce_step_counter(mrb_state *mrb, mrb_value self)
|
|
|
195
216
|
* representation.
|
|
196
217
|
*/
|
|
197
218
|
|
|
219
|
+
static mrb_value
|
|
220
|
+
flo_pow(mrb_state *mrb, mrb_value x)
|
|
221
|
+
{
|
|
222
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
223
|
+
mrb_float d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y));
|
|
224
|
+
return mrb_float_value(mrb, d);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
static mrb_value
|
|
228
|
+
flo_idiv(mrb_state *mrb, mrb_value xv)
|
|
229
|
+
{
|
|
230
|
+
mrb_int y, div;
|
|
231
|
+
|
|
232
|
+
mrb_get_args(mrb, "i", &y);
|
|
233
|
+
div = mrb_num_div_int(mrb, (mrb_int)mrb_float(xv), y);
|
|
234
|
+
return mrb_int_value(mrb, (mrb_int)div);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
mrb_float
|
|
238
|
+
mrb_num_div_flo(mrb_state *mrb, mrb_float x, mrb_float y)
|
|
239
|
+
{
|
|
240
|
+
mrb_float f;
|
|
241
|
+
|
|
242
|
+
if (y == 0) {
|
|
243
|
+
if (x > 0) f = INFINITY;
|
|
244
|
+
else if (x < 0) f = -INFINITY;
|
|
245
|
+
else /* if (x == 0) */ f = NAN;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
f = x / y;
|
|
249
|
+
}
|
|
250
|
+
return f;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
static mrb_value
|
|
254
|
+
flo_div(mrb_state *mrb, mrb_value xv)
|
|
255
|
+
{
|
|
256
|
+
mrb_float x, y;
|
|
257
|
+
|
|
258
|
+
x = mrb_float(xv);
|
|
259
|
+
mrb_get_args(mrb, "f", &y);
|
|
260
|
+
x = mrb_num_div_flo(mrb, x, y);
|
|
261
|
+
return mrb_float_value(mrb, x);
|
|
262
|
+
}
|
|
263
|
+
|
|
198
264
|
/* 15.2.9.3.16(x) */
|
|
199
265
|
/*
|
|
200
266
|
* call-seq:
|
|
201
267
|
* flt.to_s -> string
|
|
268
|
+
* flt.inspect -> string
|
|
202
269
|
*
|
|
203
270
|
* Returns a string containing a representation of self. As well as a
|
|
204
271
|
* fixed or exponential form of the number, the call may return
|
|
205
272
|
* "<code>NaN</code>", "<code>Infinity</code>", and
|
|
206
273
|
* "<code>-Infinity</code>".
|
|
274
|
+
*
|
|
275
|
+
* 3.0.to_s #=> 3.0
|
|
276
|
+
* 3.25.to_s #=> 3.25
|
|
207
277
|
*/
|
|
208
278
|
|
|
209
279
|
static mrb_value
|
|
210
280
|
flo_to_s(mrb_state *mrb, mrb_value flt)
|
|
211
281
|
{
|
|
212
282
|
mrb_float f = mrb_float(flt);
|
|
283
|
+
mrb_value str;
|
|
213
284
|
|
|
214
285
|
if (isinf(f)) {
|
|
215
|
-
|
|
216
|
-
|
|
286
|
+
str = f < 0 ? mrb_str_new_lit(mrb, "-Infinity")
|
|
287
|
+
: mrb_str_new_lit(mrb, "Infinity");
|
|
288
|
+
goto exit;
|
|
217
289
|
}
|
|
218
290
|
else if (isnan(f)) {
|
|
219
|
-
|
|
291
|
+
str = mrb_str_new_lit(mrb, "NaN");
|
|
292
|
+
goto exit;
|
|
220
293
|
}
|
|
221
294
|
else {
|
|
222
295
|
char fmt[] = "%." MRB_STRINGIZE(FLO_TO_STR_PREC) "g";
|
|
223
|
-
mrb_value str = mrb_float_to_str(mrb, flt, fmt);
|
|
224
296
|
mrb_int len;
|
|
225
297
|
char *begp, *p, *endp;
|
|
226
298
|
|
|
299
|
+
str = mrb_float_to_str(mrb, flt, fmt);
|
|
300
|
+
|
|
227
301
|
insert_dot_zero:
|
|
228
302
|
begp = RSTRING_PTR(str);
|
|
229
303
|
len = RSTRING_LEN(str);
|
|
230
304
|
for (p = begp, endp = p + len; p < endp; ++p) {
|
|
231
305
|
if (*p == '.') {
|
|
232
|
-
|
|
306
|
+
goto exit;
|
|
233
307
|
}
|
|
234
308
|
else if (*p == 'e') {
|
|
235
309
|
ptrdiff_t e_pos = p - begp;
|
|
@@ -237,7 +311,7 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
|
|
|
237
311
|
p = RSTRING_PTR(str) + e_pos;
|
|
238
312
|
memmove(p + 2, p, len - e_pos);
|
|
239
313
|
memcpy(p, ".0", 2);
|
|
240
|
-
|
|
314
|
+
goto exit;
|
|
241
315
|
}
|
|
242
316
|
}
|
|
243
317
|
|
|
@@ -246,9 +320,16 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
|
|
|
246
320
|
str = mrb_float_to_str(mrb, flt, fmt);
|
|
247
321
|
goto insert_dot_zero;
|
|
248
322
|
}
|
|
323
|
+
else {
|
|
324
|
+
mrb_str_cat(mrb, str, ".0", 2);
|
|
325
|
+
}
|
|
249
326
|
|
|
250
|
-
|
|
327
|
+
goto exit;
|
|
251
328
|
}
|
|
329
|
+
|
|
330
|
+
exit:
|
|
331
|
+
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
332
|
+
return str;
|
|
252
333
|
}
|
|
253
334
|
|
|
254
335
|
/* 15.2.9.3.2 */
|
|
@@ -263,9 +344,8 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
|
|
|
263
344
|
static mrb_value
|
|
264
345
|
flo_minus(mrb_state *mrb, mrb_value x)
|
|
265
346
|
{
|
|
266
|
-
mrb_value y;
|
|
347
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
267
348
|
|
|
268
|
-
mrb_get_args(mrb, "o", &y);
|
|
269
349
|
return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
|
|
270
350
|
}
|
|
271
351
|
|
|
@@ -281,9 +361,8 @@ flo_minus(mrb_state *mrb, mrb_value x)
|
|
|
281
361
|
static mrb_value
|
|
282
362
|
flo_mul(mrb_state *mrb, mrb_value x)
|
|
283
363
|
{
|
|
284
|
-
mrb_value y;
|
|
364
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
285
365
|
|
|
286
|
-
mrb_get_args(mrb, "o", &y);
|
|
287
366
|
return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
|
|
288
367
|
}
|
|
289
368
|
|
|
@@ -343,11 +422,9 @@ flodivmod(mrb_state *mrb, double x, double y, mrb_float *divp, mrb_float *modp)
|
|
|
343
422
|
static mrb_value
|
|
344
423
|
flo_mod(mrb_state *mrb, mrb_value x)
|
|
345
424
|
{
|
|
346
|
-
mrb_value y;
|
|
425
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
347
426
|
mrb_float mod;
|
|
348
427
|
|
|
349
|
-
mrb_get_args(mrb, "o", &y);
|
|
350
|
-
|
|
351
428
|
flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), 0, &mod);
|
|
352
429
|
return mrb_float_value(mrb, mod);
|
|
353
430
|
}
|
|
@@ -366,22 +443,20 @@ flo_mod(mrb_state *mrb, mrb_value x)
|
|
|
366
443
|
* (1.0).eql?(1.0) #=> true
|
|
367
444
|
*/
|
|
368
445
|
static mrb_value
|
|
369
|
-
|
|
446
|
+
int_eql(mrb_state *mrb, mrb_value x)
|
|
370
447
|
{
|
|
371
|
-
mrb_value y;
|
|
448
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
372
449
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y));
|
|
450
|
+
if (!mrb_integer_p(y)) return mrb_false_value();
|
|
451
|
+
return mrb_bool_value(mrb_integer(x) == mrb_integer(y));
|
|
376
452
|
}
|
|
377
453
|
|
|
378
|
-
#ifndef
|
|
454
|
+
#ifndef MRB_NO_FLOAT
|
|
379
455
|
static mrb_value
|
|
380
456
|
flo_eql(mrb_state *mrb, mrb_value x)
|
|
381
457
|
{
|
|
382
|
-
mrb_value y;
|
|
458
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
383
459
|
|
|
384
|
-
mrb_get_args(mrb, "o", &y);
|
|
385
460
|
if (!mrb_float_p(y)) return mrb_false_value();
|
|
386
461
|
return mrb_bool_value(mrb_float(x) == mrb_float(y));
|
|
387
462
|
}
|
|
@@ -402,12 +477,11 @@ flo_eql(mrb_state *mrb, mrb_value x)
|
|
|
402
477
|
static mrb_value
|
|
403
478
|
flo_eq(mrb_state *mrb, mrb_value x)
|
|
404
479
|
{
|
|
405
|
-
mrb_value y;
|
|
406
|
-
mrb_get_args(mrb, "o", &y);
|
|
480
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
407
481
|
|
|
408
482
|
switch (mrb_type(y)) {
|
|
409
|
-
case
|
|
410
|
-
return mrb_bool_value(mrb_float(x) == (mrb_float)
|
|
483
|
+
case MRB_TT_INTEGER:
|
|
484
|
+
return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_integer(y));
|
|
411
485
|
case MRB_TT_FLOAT:
|
|
412
486
|
return mrb_bool_value(mrb_float(x) == mrb_float(y));
|
|
413
487
|
default:
|
|
@@ -419,11 +493,15 @@ static int64_t
|
|
|
419
493
|
value_int64(mrb_state *mrb, mrb_value x)
|
|
420
494
|
{
|
|
421
495
|
switch (mrb_type(x)) {
|
|
422
|
-
case
|
|
423
|
-
return (int64_t)
|
|
424
|
-
break;
|
|
496
|
+
case MRB_TT_INTEGER:
|
|
497
|
+
return (int64_t)mrb_integer(x);
|
|
425
498
|
case MRB_TT_FLOAT:
|
|
426
|
-
|
|
499
|
+
{
|
|
500
|
+
double f = mrb_float(x);
|
|
501
|
+
|
|
502
|
+
if ((mrb_float)INT64_MAX >= f && f >= (mrb_float)INT64_MIN)
|
|
503
|
+
return (int64_t)f;
|
|
504
|
+
}
|
|
427
505
|
default:
|
|
428
506
|
mrb_raise(mrb, E_TYPE_ERROR, "cannot convert to Integer");
|
|
429
507
|
break;
|
|
@@ -435,28 +513,26 @@ value_int64(mrb_state *mrb, mrb_value x)
|
|
|
435
513
|
static mrb_value
|
|
436
514
|
int64_value(mrb_state *mrb, int64_t v)
|
|
437
515
|
{
|
|
438
|
-
if (TYPED_FIXABLE(v,int64_t)) {
|
|
439
|
-
|
|
516
|
+
if (!TYPED_FIXABLE(v,int64_t)) {
|
|
517
|
+
int_overflow(mrb, "bit operation");
|
|
440
518
|
}
|
|
441
|
-
return
|
|
519
|
+
return mrb_fixnum_value((mrb_int)v);
|
|
442
520
|
}
|
|
443
521
|
|
|
444
522
|
static mrb_value
|
|
445
523
|
flo_rev(mrb_state *mrb, mrb_value x)
|
|
446
524
|
{
|
|
447
|
-
int64_t v1;
|
|
448
|
-
v1 = (int64_t)mrb_float(x);
|
|
525
|
+
int64_t v1 = value_int64(mrb, x);
|
|
449
526
|
return int64_value(mrb, ~v1);
|
|
450
527
|
}
|
|
451
528
|
|
|
452
529
|
static mrb_value
|
|
453
530
|
flo_and(mrb_state *mrb, mrb_value x)
|
|
454
531
|
{
|
|
455
|
-
mrb_value y;
|
|
532
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
456
533
|
int64_t v1, v2;
|
|
457
|
-
mrb_get_args(mrb, "o", &y);
|
|
458
534
|
|
|
459
|
-
v1 = (
|
|
535
|
+
v1 = value_int64(mrb, x);
|
|
460
536
|
v2 = value_int64(mrb, y);
|
|
461
537
|
return int64_value(mrb, v1 & v2);
|
|
462
538
|
}
|
|
@@ -464,11 +540,10 @@ flo_and(mrb_state *mrb, mrb_value x)
|
|
|
464
540
|
static mrb_value
|
|
465
541
|
flo_or(mrb_state *mrb, mrb_value x)
|
|
466
542
|
{
|
|
467
|
-
mrb_value y;
|
|
543
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
468
544
|
int64_t v1, v2;
|
|
469
|
-
mrb_get_args(mrb, "o", &y);
|
|
470
545
|
|
|
471
|
-
v1 = (
|
|
546
|
+
v1 = value_int64(mrb, x);
|
|
472
547
|
v2 = value_int64(mrb, y);
|
|
473
548
|
return int64_value(mrb, v1 | v2);
|
|
474
549
|
}
|
|
@@ -476,11 +551,10 @@ flo_or(mrb_state *mrb, mrb_value x)
|
|
|
476
551
|
static mrb_value
|
|
477
552
|
flo_xor(mrb_state *mrb, mrb_value x)
|
|
478
553
|
{
|
|
479
|
-
mrb_value y;
|
|
554
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
480
555
|
int64_t v1, v2;
|
|
481
|
-
mrb_get_args(mrb, "o", &y);
|
|
482
556
|
|
|
483
|
-
v1 = (
|
|
557
|
+
v1 = value_int64(mrb, x);
|
|
484
558
|
v2 = value_int64(mrb, y);
|
|
485
559
|
return int64_value(mrb, v1 ^ v2);
|
|
486
560
|
}
|
|
@@ -494,6 +568,10 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
|
|
|
494
568
|
return x;
|
|
495
569
|
}
|
|
496
570
|
val = mrb_float(x);
|
|
571
|
+
if (width < -MRB_INT_BIT/2) {
|
|
572
|
+
if (val < 0) return mrb_fixnum_value(-1);
|
|
573
|
+
return mrb_fixnum_value(0);
|
|
574
|
+
}
|
|
497
575
|
if (width < 0) {
|
|
498
576
|
while (width++) {
|
|
499
577
|
val /= 2;
|
|
@@ -520,7 +598,9 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
|
|
|
520
598
|
val *= 2;
|
|
521
599
|
}
|
|
522
600
|
}
|
|
523
|
-
|
|
601
|
+
if (FIXABLE_FLOAT(val))
|
|
602
|
+
return mrb_int_value(mrb, (mrb_int)val);
|
|
603
|
+
return mrb_float_value(mrb, val);
|
|
524
604
|
}
|
|
525
605
|
|
|
526
606
|
static mrb_value
|
|
@@ -529,6 +609,7 @@ flo_rshift(mrb_state *mrb, mrb_value x)
|
|
|
529
609
|
mrb_int width;
|
|
530
610
|
|
|
531
611
|
mrb_get_args(mrb, "i", &width);
|
|
612
|
+
if (width == MRB_INT_MIN) return flo_shift(mrb, x, -MRB_INT_BIT);
|
|
532
613
|
return flo_shift(mrb, x, -width);
|
|
533
614
|
}
|
|
534
615
|
|
|
@@ -626,7 +707,7 @@ flo_floor(mrb_state *mrb, mrb_value num)
|
|
|
626
707
|
mrb_float f = floor(mrb_float(num));
|
|
627
708
|
|
|
628
709
|
mrb_check_num_exact(mrb, f);
|
|
629
|
-
return mrb_int_value(mrb, f);
|
|
710
|
+
return mrb_int_value(mrb, (mrb_int)f);
|
|
630
711
|
}
|
|
631
712
|
|
|
632
713
|
/* 15.2.9.3.8 */
|
|
@@ -649,7 +730,7 @@ flo_ceil(mrb_state *mrb, mrb_value num)
|
|
|
649
730
|
mrb_float f = ceil(mrb_float(num));
|
|
650
731
|
|
|
651
732
|
mrb_check_num_exact(mrb, f);
|
|
652
|
-
return mrb_int_value(mrb, f);
|
|
733
|
+
return mrb_int_value(mrb, (mrb_int)f);
|
|
653
734
|
}
|
|
654
735
|
|
|
655
736
|
/* 15.2.9.3.12 */
|
|
@@ -731,7 +812,9 @@ flo_round(mrb_state *mrb, mrb_value num)
|
|
|
731
812
|
if (!isfinite(number)) return num;
|
|
732
813
|
return mrb_float_value(mrb, number);
|
|
733
814
|
}
|
|
734
|
-
|
|
815
|
+
if (!FIXABLE_FLOAT(number))
|
|
816
|
+
return mrb_float_value(mrb, number);
|
|
817
|
+
return mrb_int_value(mrb, (mrb_int)number);
|
|
735
818
|
}
|
|
736
819
|
|
|
737
820
|
/* 15.2.9.3.14 */
|
|
@@ -753,7 +836,7 @@ flo_truncate(mrb_state *mrb, mrb_value num)
|
|
|
753
836
|
if (f < 0.0) f = ceil(f);
|
|
754
837
|
|
|
755
838
|
mrb_check_num_exact(mrb, f);
|
|
756
|
-
return mrb_int_value(mrb, f);
|
|
839
|
+
return mrb_int_value(mrb, (mrb_int)f);
|
|
757
840
|
}
|
|
758
841
|
|
|
759
842
|
static mrb_value
|
|
@@ -766,8 +849,7 @@ flo_nan_p(mrb_state *mrb, mrb_value num)
|
|
|
766
849
|
/*
|
|
767
850
|
* Document-class: Integer
|
|
768
851
|
*
|
|
769
|
-
* <code>Integer</code> is
|
|
770
|
-
* hold whole numbers, <code>Bignum</code> and <code>Fixnum</code>.
|
|
852
|
+
* <code>Integer</code> is hold whole numbers.
|
|
771
853
|
*
|
|
772
854
|
*/
|
|
773
855
|
|
|
@@ -791,20 +873,18 @@ fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
791
873
|
{
|
|
792
874
|
mrb_int a;
|
|
793
875
|
|
|
794
|
-
a =
|
|
795
|
-
if (
|
|
876
|
+
a = mrb_integer(x);
|
|
877
|
+
if (mrb_integer_p(y)) {
|
|
796
878
|
mrb_int b, c;
|
|
797
879
|
|
|
798
880
|
if (a == 0) return x;
|
|
799
|
-
b =
|
|
881
|
+
b = mrb_integer(y);
|
|
800
882
|
if (mrb_int_mul_overflow(a, b, &c)) {
|
|
801
|
-
|
|
802
|
-
return mrb_float_value(mrb, (mrb_float)a * (mrb_float)b);
|
|
803
|
-
#endif
|
|
883
|
+
int_overflow(mrb, "multiplication");
|
|
804
884
|
}
|
|
805
885
|
return mrb_fixnum_value(c);
|
|
806
886
|
}
|
|
807
|
-
#ifdef
|
|
887
|
+
#ifdef MRB_NO_FLOAT
|
|
808
888
|
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
809
889
|
#else
|
|
810
890
|
return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y));
|
|
@@ -814,10 +894,10 @@ fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
814
894
|
MRB_API mrb_value
|
|
815
895
|
mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
816
896
|
{
|
|
817
|
-
if (
|
|
897
|
+
if (mrb_integer_p(x)) {
|
|
818
898
|
return fixnum_mul(mrb, x, y);
|
|
819
899
|
}
|
|
820
|
-
#ifndef
|
|
900
|
+
#ifndef MRB_NO_FLOAT
|
|
821
901
|
if (mrb_float_p(x)) {
|
|
822
902
|
return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
|
|
823
903
|
}
|
|
@@ -837,40 +917,33 @@ mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
837
917
|
*/
|
|
838
918
|
|
|
839
919
|
static mrb_value
|
|
840
|
-
|
|
920
|
+
int_mul(mrb_state *mrb, mrb_value x)
|
|
841
921
|
{
|
|
842
|
-
mrb_value y;
|
|
922
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
843
923
|
|
|
844
|
-
mrb_get_args(mrb, "o", &y);
|
|
845
924
|
return fixnum_mul(mrb, x, y);
|
|
846
925
|
}
|
|
847
926
|
|
|
848
927
|
static void
|
|
849
928
|
fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
|
|
850
929
|
{
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
/* TODO: add mrb_assert(y != 0) to make sure */
|
|
854
|
-
|
|
855
|
-
if (y < 0) {
|
|
856
|
-
if (x < 0)
|
|
857
|
-
div = -x / -y;
|
|
858
|
-
else
|
|
859
|
-
div = - (x / -y);
|
|
930
|
+
if (y == 0) {
|
|
931
|
+
int_zerodiv(mrb);
|
|
860
932
|
}
|
|
861
|
-
else {
|
|
862
|
-
|
|
863
|
-
div = - (-x / y);
|
|
864
|
-
else
|
|
865
|
-
div = x / y;
|
|
933
|
+
else if(x == MRB_INT_MIN && y == -1) {
|
|
934
|
+
int_overflow(mrb, "division");
|
|
866
935
|
}
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
mod
|
|
870
|
-
|
|
936
|
+
else {
|
|
937
|
+
mrb_int div = x / y;
|
|
938
|
+
mrb_int mod = x - div * y;
|
|
939
|
+
|
|
940
|
+
if ((x ^ y) < 0 && x != div * y) {
|
|
941
|
+
mod += y;
|
|
942
|
+
div -= 1;
|
|
943
|
+
}
|
|
944
|
+
if (divp) *divp = div;
|
|
945
|
+
if (modp) *modp = mod;
|
|
871
946
|
}
|
|
872
|
-
if (divp) *divp = div;
|
|
873
|
-
if (modp) *modp = mod;
|
|
874
947
|
}
|
|
875
948
|
|
|
876
949
|
/* 15.2.8.3.5 */
|
|
@@ -884,30 +957,19 @@ fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
|
|
|
884
957
|
*/
|
|
885
958
|
|
|
886
959
|
static mrb_value
|
|
887
|
-
|
|
960
|
+
int_mod(mrb_state *mrb, mrb_value x)
|
|
888
961
|
{
|
|
889
|
-
mrb_value y;
|
|
962
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
890
963
|
mrb_int a, b;
|
|
891
964
|
|
|
892
|
-
|
|
893
|
-
a
|
|
894
|
-
if (mrb_fixnum_p(y) && a != MRB_INT_MIN && (b=mrb_fixnum(y)) != MRB_INT_MIN) {
|
|
965
|
+
a = mrb_integer(x);
|
|
966
|
+
if (mrb_integer_p(y) && a != MRB_INT_MIN && (b=mrb_integer(y)) != MRB_INT_MIN) {
|
|
895
967
|
mrb_int mod;
|
|
896
968
|
|
|
897
|
-
if (b == 0) {
|
|
898
|
-
#ifdef MRB_WITHOUT_FLOAT
|
|
899
|
-
/* ZeroDivisionError */
|
|
900
|
-
return mrb_fixnum_value(0);
|
|
901
|
-
#else
|
|
902
|
-
if (a > 0) return mrb_float_value(mrb, INFINITY);
|
|
903
|
-
if (a < 0) return mrb_float_value(mrb, INFINITY);
|
|
904
|
-
return mrb_float_value(mrb, NAN);
|
|
905
|
-
#endif
|
|
906
|
-
}
|
|
907
969
|
fixdivmod(mrb, a, b, NULL, &mod);
|
|
908
970
|
return mrb_fixnum_value(mod);
|
|
909
971
|
}
|
|
910
|
-
#ifdef
|
|
972
|
+
#ifdef MRB_NO_FLOAT
|
|
911
973
|
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
912
974
|
#else
|
|
913
975
|
else {
|
|
@@ -926,55 +988,41 @@ fix_mod(mrb_state *mrb, mrb_value x)
|
|
|
926
988
|
* See <code>Numeric#divmod</code>.
|
|
927
989
|
*/
|
|
928
990
|
static mrb_value
|
|
929
|
-
|
|
991
|
+
int_divmod(mrb_state *mrb, mrb_value x)
|
|
930
992
|
{
|
|
931
|
-
mrb_value y;
|
|
932
|
-
|
|
933
|
-
mrb_get_args(mrb, "o", &y);
|
|
993
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
934
994
|
|
|
935
|
-
if (
|
|
995
|
+
if (mrb_integer_p(y)) {
|
|
936
996
|
mrb_int div, mod;
|
|
937
997
|
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
return mrb_assoc_new(mrb, mrb_fixnum_value(0), mrb_fixnum_value(0));
|
|
941
|
-
#else
|
|
942
|
-
return mrb_assoc_new(mrb, ((mrb_fixnum(x) == 0) ?
|
|
943
|
-
mrb_float_value(mrb, NAN):
|
|
944
|
-
mrb_float_value(mrb, INFINITY)),
|
|
945
|
-
mrb_float_value(mrb, NAN));
|
|
946
|
-
#endif
|
|
947
|
-
}
|
|
948
|
-
fixdivmod(mrb, mrb_fixnum(x), mrb_fixnum(y), &div, &mod);
|
|
949
|
-
return mrb_assoc_new(mrb, mrb_fixnum_value(div), mrb_fixnum_value(mod));
|
|
998
|
+
fixdivmod(mrb, mrb_integer(x), mrb_integer(y), &div, &mod);
|
|
999
|
+
return mrb_assoc_new(mrb, mrb_int_value(mrb, div), mrb_int_value(mrb, mod));
|
|
950
1000
|
}
|
|
951
|
-
#ifdef
|
|
1001
|
+
#ifdef MRB_NO_FLOAT
|
|
952
1002
|
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
953
1003
|
#else
|
|
954
1004
|
else {
|
|
955
1005
|
mrb_float div, mod;
|
|
956
1006
|
mrb_value a, b;
|
|
957
1007
|
|
|
958
|
-
flodivmod(mrb, (mrb_float)
|
|
959
|
-
a = mrb_int_value(mrb, div);
|
|
1008
|
+
flodivmod(mrb, (mrb_float)mrb_integer(x), mrb_to_flo(mrb, y), &div, &mod);
|
|
1009
|
+
a = mrb_int_value(mrb, (mrb_int)div);
|
|
960
1010
|
b = mrb_float_value(mrb, mod);
|
|
961
1011
|
return mrb_assoc_new(mrb, a, b);
|
|
962
1012
|
}
|
|
963
1013
|
#endif
|
|
964
1014
|
}
|
|
965
1015
|
|
|
966
|
-
#ifndef
|
|
1016
|
+
#ifndef MRB_NO_FLOAT
|
|
967
1017
|
static mrb_value
|
|
968
1018
|
flo_divmod(mrb_state *mrb, mrb_value x)
|
|
969
1019
|
{
|
|
970
|
-
mrb_value y;
|
|
1020
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
971
1021
|
mrb_float div, mod;
|
|
972
1022
|
mrb_value a, b;
|
|
973
1023
|
|
|
974
|
-
mrb_get_args(mrb, "o", &y);
|
|
975
|
-
|
|
976
1024
|
flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), &div, &mod);
|
|
977
|
-
a = mrb_int_value(mrb, div);
|
|
1025
|
+
a = mrb_int_value(mrb, (mrb_int)div);
|
|
978
1026
|
b = mrb_float_value(mrb, mod);
|
|
979
1027
|
return mrb_assoc_new(mrb, a, b);
|
|
980
1028
|
}
|
|
@@ -993,17 +1041,16 @@ flo_divmod(mrb_state *mrb, mrb_value x)
|
|
|
993
1041
|
*/
|
|
994
1042
|
|
|
995
1043
|
static mrb_value
|
|
996
|
-
|
|
1044
|
+
int_equal(mrb_state *mrb, mrb_value x)
|
|
997
1045
|
{
|
|
998
|
-
mrb_value y;
|
|
1046
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
999
1047
|
|
|
1000
|
-
mrb_get_args(mrb, "o", &y);
|
|
1001
1048
|
switch (mrb_type(y)) {
|
|
1002
|
-
case
|
|
1003
|
-
return mrb_bool_value(
|
|
1004
|
-
#ifndef
|
|
1049
|
+
case MRB_TT_INTEGER:
|
|
1050
|
+
return mrb_bool_value(mrb_integer(x) == mrb_integer(y));
|
|
1051
|
+
#ifndef MRB_NO_FLOAT
|
|
1005
1052
|
case MRB_TT_FLOAT:
|
|
1006
|
-
return mrb_bool_value((mrb_float)
|
|
1053
|
+
return mrb_bool_value((mrb_float)mrb_integer(x) == mrb_float(y));
|
|
1007
1054
|
#endif
|
|
1008
1055
|
default:
|
|
1009
1056
|
return mrb_false_value();
|
|
@@ -1022,24 +1069,24 @@ fix_equal(mrb_state *mrb, mrb_value x)
|
|
|
1022
1069
|
*/
|
|
1023
1070
|
|
|
1024
1071
|
static mrb_value
|
|
1025
|
-
|
|
1072
|
+
int_rev(mrb_state *mrb, mrb_value num)
|
|
1026
1073
|
{
|
|
1027
|
-
mrb_int val =
|
|
1074
|
+
mrb_int val = mrb_integer(num);
|
|
1028
1075
|
|
|
1029
|
-
return
|
|
1076
|
+
return mrb_int_value(mrb, ~val);
|
|
1030
1077
|
}
|
|
1031
1078
|
|
|
1032
|
-
#ifdef
|
|
1079
|
+
#ifdef MRB_NO_FLOAT
|
|
1033
1080
|
#define bit_op(x,y,op1,op2) do {\
|
|
1034
|
-
return
|
|
1081
|
+
return mrb_int_value(mrb, (mrb_integer(x) op2 mrb_integer(y)));\
|
|
1035
1082
|
} while(0)
|
|
1036
1083
|
#else
|
|
1037
1084
|
static mrb_value flo_and(mrb_state *mrb, mrb_value x);
|
|
1038
1085
|
static mrb_value flo_or(mrb_state *mrb, mrb_value x);
|
|
1039
1086
|
static mrb_value flo_xor(mrb_state *mrb, mrb_value x);
|
|
1040
1087
|
#define bit_op(x,y,op1,op2) do {\
|
|
1041
|
-
if (
|
|
1042
|
-
return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)
|
|
1088
|
+
if (mrb_integer_p(y)) return mrb_int_value(mrb, (mrb_integer(x) op2 mrb_integer(y))); \
|
|
1089
|
+
return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)mrb_integer(x)));\
|
|
1043
1090
|
} while(0)
|
|
1044
1091
|
#endif
|
|
1045
1092
|
|
|
@@ -1052,11 +1099,10 @@ static mrb_value flo_xor(mrb_state *mrb, mrb_value x);
|
|
|
1052
1099
|
*/
|
|
1053
1100
|
|
|
1054
1101
|
static mrb_value
|
|
1055
|
-
|
|
1102
|
+
int_and(mrb_state *mrb, mrb_value x)
|
|
1056
1103
|
{
|
|
1057
|
-
mrb_value y;
|
|
1104
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
1058
1105
|
|
|
1059
|
-
mrb_get_args(mrb, "o", &y);
|
|
1060
1106
|
bit_op(x, y, and, &);
|
|
1061
1107
|
}
|
|
1062
1108
|
|
|
@@ -1069,11 +1115,10 @@ fix_and(mrb_state *mrb, mrb_value x)
|
|
|
1069
1115
|
*/
|
|
1070
1116
|
|
|
1071
1117
|
static mrb_value
|
|
1072
|
-
|
|
1118
|
+
int_or(mrb_state *mrb, mrb_value x)
|
|
1073
1119
|
{
|
|
1074
|
-
mrb_value y;
|
|
1120
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
1075
1121
|
|
|
1076
|
-
mrb_get_args(mrb, "o", &y);
|
|
1077
1122
|
bit_op(x, y, or, |);
|
|
1078
1123
|
}
|
|
1079
1124
|
|
|
@@ -1086,11 +1131,10 @@ fix_or(mrb_state *mrb, mrb_value x)
|
|
|
1086
1131
|
*/
|
|
1087
1132
|
|
|
1088
1133
|
static mrb_value
|
|
1089
|
-
|
|
1134
|
+
int_xor(mrb_state *mrb, mrb_value x)
|
|
1090
1135
|
{
|
|
1091
|
-
mrb_value y;
|
|
1136
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
1092
1137
|
|
|
1093
|
-
mrb_get_args(mrb, "o", &y);
|
|
1094
1138
|
bit_op(x, y, or, ^);
|
|
1095
1139
|
}
|
|
1096
1140
|
|
|
@@ -1099,61 +1143,34 @@ fix_xor(mrb_state *mrb, mrb_value x)
|
|
|
1099
1143
|
static mrb_value
|
|
1100
1144
|
lshift(mrb_state *mrb, mrb_int val, mrb_int width)
|
|
1101
1145
|
{
|
|
1102
|
-
|
|
1103
|
-
#ifdef MRB_WITHOUT_FLOAT
|
|
1104
|
-
return mrb_fixnum_value(0);
|
|
1105
|
-
#else
|
|
1106
|
-
return mrb_float_value(mrb, INFINITY);
|
|
1107
|
-
#endif
|
|
1108
|
-
}
|
|
1146
|
+
mrb_assert(width >= 0);
|
|
1109
1147
|
if (val > 0) {
|
|
1110
1148
|
if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
|
|
1111
1149
|
(val > (MRB_INT_MAX >> width))) {
|
|
1112
|
-
|
|
1113
|
-
return mrb_fixnum_value(-1);
|
|
1114
|
-
#else
|
|
1115
|
-
goto bit_overflow;
|
|
1116
|
-
#endif
|
|
1150
|
+
int_overflow(mrb, "bit shift");
|
|
1117
1151
|
}
|
|
1118
|
-
return
|
|
1152
|
+
return mrb_int_value(mrb, val << width);
|
|
1119
1153
|
}
|
|
1120
1154
|
else {
|
|
1121
1155
|
if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
|
|
1122
1156
|
(val <= (MRB_INT_MIN >> width))) {
|
|
1123
|
-
|
|
1124
|
-
return mrb_fixnum_value(0);
|
|
1125
|
-
#else
|
|
1126
|
-
goto bit_overflow;
|
|
1127
|
-
#endif
|
|
1128
|
-
}
|
|
1129
|
-
return mrb_fixnum_value(val * ((mrb_int)1 << width));
|
|
1130
|
-
}
|
|
1131
|
-
|
|
1132
|
-
#ifndef MRB_WITHOUT_FLOAT
|
|
1133
|
-
bit_overflow:
|
|
1134
|
-
{
|
|
1135
|
-
mrb_float f = (mrb_float)val;
|
|
1136
|
-
while (width--) {
|
|
1137
|
-
f *= 2;
|
|
1157
|
+
int_overflow(mrb, "bit shift");
|
|
1138
1158
|
}
|
|
1139
|
-
return
|
|
1159
|
+
return mrb_int_value(mrb, (val * ((mrb_int)1 << width)));
|
|
1140
1160
|
}
|
|
1141
|
-
#endif
|
|
1142
1161
|
}
|
|
1143
1162
|
|
|
1144
1163
|
static mrb_value
|
|
1145
|
-
rshift(mrb_int val, mrb_int width)
|
|
1164
|
+
rshift(mrb_state *mrb, mrb_int val, mrb_int width)
|
|
1146
1165
|
{
|
|
1147
|
-
|
|
1148
|
-
return mrb_fixnum_value(0);
|
|
1149
|
-
}
|
|
1166
|
+
mrb_assert(width >= 0);
|
|
1150
1167
|
if (width >= NUMERIC_SHIFT_WIDTH_MAX) {
|
|
1151
1168
|
if (val < 0) {
|
|
1152
1169
|
return mrb_fixnum_value(-1);
|
|
1153
1170
|
}
|
|
1154
1171
|
return mrb_fixnum_value(0);
|
|
1155
1172
|
}
|
|
1156
|
-
return
|
|
1173
|
+
return mrb_int_value(mrb, val >> width);
|
|
1157
1174
|
}
|
|
1158
1175
|
|
|
1159
1176
|
/* 15.2.8.3.12 */
|
|
@@ -1165,7 +1182,7 @@ rshift(mrb_int val, mrb_int width)
|
|
|
1165
1182
|
*/
|
|
1166
1183
|
|
|
1167
1184
|
static mrb_value
|
|
1168
|
-
|
|
1185
|
+
int_lshift(mrb_state *mrb, mrb_value x)
|
|
1169
1186
|
{
|
|
1170
1187
|
mrb_int width, val;
|
|
1171
1188
|
|
|
@@ -1173,10 +1190,11 @@ fix_lshift(mrb_state *mrb, mrb_value x)
|
|
|
1173
1190
|
if (width == 0) {
|
|
1174
1191
|
return x;
|
|
1175
1192
|
}
|
|
1176
|
-
val =
|
|
1193
|
+
val = mrb_integer(x);
|
|
1177
1194
|
if (val == 0) return x;
|
|
1178
1195
|
if (width < 0) {
|
|
1179
|
-
return rshift(val,
|
|
1196
|
+
if (width == MRB_INT_MIN) return rshift(mrb, val, MRB_INT_BIT);
|
|
1197
|
+
return rshift(mrb, val, -width);
|
|
1180
1198
|
}
|
|
1181
1199
|
return lshift(mrb, val, width);
|
|
1182
1200
|
}
|
|
@@ -1190,7 +1208,7 @@ fix_lshift(mrb_state *mrb, mrb_value x)
|
|
|
1190
1208
|
*/
|
|
1191
1209
|
|
|
1192
1210
|
static mrb_value
|
|
1193
|
-
|
|
1211
|
+
int_rshift(mrb_state *mrb, mrb_value x)
|
|
1194
1212
|
{
|
|
1195
1213
|
mrb_int width, val;
|
|
1196
1214
|
|
|
@@ -1198,12 +1216,13 @@ fix_rshift(mrb_state *mrb, mrb_value x)
|
|
|
1198
1216
|
if (width == 0) {
|
|
1199
1217
|
return x;
|
|
1200
1218
|
}
|
|
1201
|
-
val =
|
|
1219
|
+
val = mrb_integer(x);
|
|
1202
1220
|
if (val == 0) return x;
|
|
1203
1221
|
if (width < 0) {
|
|
1222
|
+
if (width == MRB_INT_MIN) int_overflow(mrb, "bit shift");
|
|
1204
1223
|
return lshift(mrb, val, -width);
|
|
1205
1224
|
}
|
|
1206
|
-
return rshift(val, width);
|
|
1225
|
+
return rshift(mrb, val, width);
|
|
1207
1226
|
}
|
|
1208
1227
|
|
|
1209
1228
|
/* 15.2.8.3.23 */
|
|
@@ -1215,11 +1234,11 @@ fix_rshift(mrb_state *mrb, mrb_value x)
|
|
|
1215
1234
|
*
|
|
1216
1235
|
*/
|
|
1217
1236
|
|
|
1218
|
-
#ifndef
|
|
1237
|
+
#ifndef MRB_NO_FLOAT
|
|
1219
1238
|
static mrb_value
|
|
1220
|
-
|
|
1239
|
+
int_to_f(mrb_state *mrb, mrb_value num)
|
|
1221
1240
|
{
|
|
1222
|
-
return mrb_float_value(mrb, (mrb_float)
|
|
1241
|
+
return mrb_float_value(mrb, (mrb_float)mrb_integer(num));
|
|
1223
1242
|
}
|
|
1224
1243
|
|
|
1225
1244
|
/*
|
|
@@ -1256,7 +1275,7 @@ mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x)
|
|
|
1256
1275
|
mrb_raisef(mrb, E_RANGE_ERROR, "number (%v) too big for integer", x);
|
|
1257
1276
|
}
|
|
1258
1277
|
}
|
|
1259
|
-
return
|
|
1278
|
+
return mrb_int_value(mrb, z);
|
|
1260
1279
|
}
|
|
1261
1280
|
#endif
|
|
1262
1281
|
|
|
@@ -1265,20 +1284,18 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1265
1284
|
{
|
|
1266
1285
|
mrb_int a;
|
|
1267
1286
|
|
|
1268
|
-
a =
|
|
1269
|
-
if (
|
|
1287
|
+
a = mrb_integer(x);
|
|
1288
|
+
if (mrb_integer_p(y)) {
|
|
1270
1289
|
mrb_int b, c;
|
|
1271
1290
|
|
|
1272
1291
|
if (a == 0) return y;
|
|
1273
|
-
b =
|
|
1292
|
+
b = mrb_integer(y);
|
|
1274
1293
|
if (mrb_int_add_overflow(a, b, &c)) {
|
|
1275
|
-
|
|
1276
|
-
return mrb_float_value(mrb, (mrb_float)a + (mrb_float)b);
|
|
1277
|
-
#endif
|
|
1294
|
+
int_overflow(mrb, "addition");
|
|
1278
1295
|
}
|
|
1279
|
-
return
|
|
1296
|
+
return mrb_int_value(mrb, c);
|
|
1280
1297
|
}
|
|
1281
|
-
#ifdef
|
|
1298
|
+
#ifdef MRB_NO_FLOAT
|
|
1282
1299
|
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
1283
1300
|
#else
|
|
1284
1301
|
return mrb_float_value(mrb, (mrb_float)a + mrb_to_flo(mrb, y));
|
|
@@ -1288,10 +1305,10 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1288
1305
|
MRB_API mrb_value
|
|
1289
1306
|
mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
1290
1307
|
{
|
|
1291
|
-
if (
|
|
1308
|
+
if (mrb_integer_p(x)) {
|
|
1292
1309
|
return fixnum_plus(mrb, x, y);
|
|
1293
1310
|
}
|
|
1294
|
-
#ifndef
|
|
1311
|
+
#ifndef MRB_NO_FLOAT
|
|
1295
1312
|
if (mrb_float_p(x)) {
|
|
1296
1313
|
return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
|
|
1297
1314
|
}
|
|
@@ -1310,11 +1327,10 @@ mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1310
1327
|
* result.
|
|
1311
1328
|
*/
|
|
1312
1329
|
static mrb_value
|
|
1313
|
-
|
|
1330
|
+
int_plus(mrb_state *mrb, mrb_value self)
|
|
1314
1331
|
{
|
|
1315
|
-
mrb_value other;
|
|
1332
|
+
mrb_value other = mrb_get_arg1(mrb);
|
|
1316
1333
|
|
|
1317
|
-
mrb_get_args(mrb, "o", &other);
|
|
1318
1334
|
return fixnum_plus(mrb, self, other);
|
|
1319
1335
|
}
|
|
1320
1336
|
|
|
@@ -1323,19 +1339,17 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1323
1339
|
{
|
|
1324
1340
|
mrb_int a;
|
|
1325
1341
|
|
|
1326
|
-
a =
|
|
1327
|
-
if (
|
|
1342
|
+
a = mrb_integer(x);
|
|
1343
|
+
if (mrb_integer_p(y)) {
|
|
1328
1344
|
mrb_int b, c;
|
|
1329
1345
|
|
|
1330
|
-
b =
|
|
1346
|
+
b = mrb_integer(y);
|
|
1331
1347
|
if (mrb_int_sub_overflow(a, b, &c)) {
|
|
1332
|
-
|
|
1333
|
-
return mrb_float_value(mrb, (mrb_float)a - (mrb_float)b);
|
|
1334
|
-
#endif
|
|
1348
|
+
int_overflow(mrb, "subtraction");
|
|
1335
1349
|
}
|
|
1336
|
-
return
|
|
1350
|
+
return mrb_int_value(mrb, c);
|
|
1337
1351
|
}
|
|
1338
|
-
#ifdef
|
|
1352
|
+
#ifdef MRB_NO_FLOAT
|
|
1339
1353
|
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
1340
1354
|
#else
|
|
1341
1355
|
return mrb_float_value(mrb, (mrb_float)a - mrb_to_flo(mrb, y));
|
|
@@ -1345,10 +1359,10 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1345
1359
|
MRB_API mrb_value
|
|
1346
1360
|
mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
1347
1361
|
{
|
|
1348
|
-
if (
|
|
1362
|
+
if (mrb_integer_p(x)) {
|
|
1349
1363
|
return fixnum_minus(mrb, x, y);
|
|
1350
1364
|
}
|
|
1351
|
-
#ifndef
|
|
1365
|
+
#ifndef MRB_NO_FLOAT
|
|
1352
1366
|
if (mrb_float_p(x)) {
|
|
1353
1367
|
return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
|
|
1354
1368
|
}
|
|
@@ -1368,11 +1382,10 @@ mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1368
1382
|
* result.
|
|
1369
1383
|
*/
|
|
1370
1384
|
static mrb_value
|
|
1371
|
-
|
|
1385
|
+
int_minus(mrb_state *mrb, mrb_value self)
|
|
1372
1386
|
{
|
|
1373
|
-
mrb_value other;
|
|
1387
|
+
mrb_value other = mrb_get_arg1(mrb);
|
|
1374
1388
|
|
|
1375
|
-
mrb_get_args(mrb, "o", &other);
|
|
1376
1389
|
return fixnum_minus(mrb, self, other);
|
|
1377
1390
|
}
|
|
1378
1391
|
|
|
@@ -1382,7 +1395,8 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
|
|
|
1382
1395
|
{
|
|
1383
1396
|
char buf[MRB_INT_BIT+1];
|
|
1384
1397
|
char *b = buf + sizeof buf;
|
|
1385
|
-
mrb_int val =
|
|
1398
|
+
mrb_int val = mrb_integer(x);
|
|
1399
|
+
mrb_value str;
|
|
1386
1400
|
|
|
1387
1401
|
if (base < 2 || 36 < base) {
|
|
1388
1402
|
mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %i", base);
|
|
@@ -1403,7 +1417,9 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
|
|
|
1403
1417
|
} while (val /= base);
|
|
1404
1418
|
}
|
|
1405
1419
|
|
|
1406
|
-
|
|
1420
|
+
str = mrb_str_new(mrb, b, buf + sizeof(buf) - b);
|
|
1421
|
+
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
1422
|
+
return str;
|
|
1407
1423
|
}
|
|
1408
1424
|
|
|
1409
1425
|
/* 15.2.8.3.25 */
|
|
@@ -1423,7 +1439,7 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
|
|
|
1423
1439
|
*
|
|
1424
1440
|
*/
|
|
1425
1441
|
static mrb_value
|
|
1426
|
-
|
|
1442
|
+
int_to_s(mrb_state *mrb, mrb_value self)
|
|
1427
1443
|
{
|
|
1428
1444
|
mrb_int base = 10;
|
|
1429
1445
|
|
|
@@ -1435,26 +1451,26 @@ fix_to_s(mrb_state *mrb, mrb_value self)
|
|
|
1435
1451
|
static mrb_int
|
|
1436
1452
|
cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2)
|
|
1437
1453
|
{
|
|
1438
|
-
#ifdef
|
|
1454
|
+
#ifdef MRB_NO_FLOAT
|
|
1439
1455
|
mrb_int x, y;
|
|
1440
1456
|
#else
|
|
1441
1457
|
mrb_float x, y;
|
|
1442
1458
|
#endif
|
|
1443
1459
|
|
|
1444
|
-
#ifdef
|
|
1445
|
-
x =
|
|
1460
|
+
#ifdef MRB_NO_FLOAT
|
|
1461
|
+
x = mrb_integer(v1);
|
|
1446
1462
|
#else
|
|
1447
1463
|
x = mrb_to_flo(mrb, v1);
|
|
1448
1464
|
#endif
|
|
1449
1465
|
switch (mrb_type(v2)) {
|
|
1450
|
-
case
|
|
1451
|
-
#ifdef
|
|
1452
|
-
y =
|
|
1466
|
+
case MRB_TT_INTEGER:
|
|
1467
|
+
#ifdef MRB_NO_FLOAT
|
|
1468
|
+
y = mrb_integer(v2);
|
|
1453
1469
|
#else
|
|
1454
|
-
y = (mrb_float)
|
|
1470
|
+
y = (mrb_float)mrb_integer(v2);
|
|
1455
1471
|
#endif
|
|
1456
1472
|
break;
|
|
1457
|
-
#ifndef
|
|
1473
|
+
#ifndef MRB_NO_FLOAT
|
|
1458
1474
|
case MRB_TT_FLOAT:
|
|
1459
1475
|
y = mrb_float(v2);
|
|
1460
1476
|
break;
|
|
@@ -1474,21 +1490,21 @@ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2)
|
|
|
1474
1490
|
/* 15.2.9.3.6 */
|
|
1475
1491
|
/*
|
|
1476
1492
|
* call-seq:
|
|
1477
|
-
* self.f <=> other.f => -1, 0, +1
|
|
1493
|
+
* self.f <=> other.f => -1, 0, +1, or nil
|
|
1478
1494
|
* < => -1
|
|
1479
1495
|
* = => 0
|
|
1480
1496
|
* > => +1
|
|
1481
1497
|
* Comparison---Returns -1, 0, or +1 depending on whether <i>fix</i> is
|
|
1482
1498
|
* less than, equal to, or greater than <i>numeric</i>. This is the
|
|
1483
|
-
* basis for the tests in <code>Comparable</code>.
|
|
1499
|
+
* basis for the tests in <code>Comparable</code>. When the operands are
|
|
1500
|
+
* not comparable, it returns nil instead of raising an exception.
|
|
1484
1501
|
*/
|
|
1485
1502
|
static mrb_value
|
|
1486
|
-
|
|
1503
|
+
num_cmp(mrb_state *mrb, mrb_value self)
|
|
1487
1504
|
{
|
|
1488
|
-
mrb_value other;
|
|
1505
|
+
mrb_value other = mrb_get_arg1(mrb);
|
|
1489
1506
|
mrb_int n;
|
|
1490
1507
|
|
|
1491
|
-
mrb_get_args(mrb, "o", &other);
|
|
1492
1508
|
n = cmpnum(mrb, self, other);
|
|
1493
1509
|
if (n == -2) return mrb_nil_value();
|
|
1494
1510
|
return mrb_fixnum_value(n);
|
|
@@ -1501,12 +1517,11 @@ cmperr(mrb_state *mrb, mrb_value v1, mrb_value v2)
|
|
|
1501
1517
|
}
|
|
1502
1518
|
|
|
1503
1519
|
static mrb_value
|
|
1504
|
-
|
|
1520
|
+
num_lt(mrb_state *mrb, mrb_value self)
|
|
1505
1521
|
{
|
|
1506
|
-
mrb_value other;
|
|
1522
|
+
mrb_value other = mrb_get_arg1(mrb);
|
|
1507
1523
|
mrb_int n;
|
|
1508
1524
|
|
|
1509
|
-
mrb_get_args(mrb, "o", &other);
|
|
1510
1525
|
n = cmpnum(mrb, self, other);
|
|
1511
1526
|
if (n == -2) cmperr(mrb, self, other);
|
|
1512
1527
|
if (n < 0) return mrb_true_value();
|
|
@@ -1514,12 +1529,11 @@ integral_lt(mrb_state *mrb, mrb_value self)
|
|
|
1514
1529
|
}
|
|
1515
1530
|
|
|
1516
1531
|
static mrb_value
|
|
1517
|
-
|
|
1532
|
+
num_le(mrb_state *mrb, mrb_value self)
|
|
1518
1533
|
{
|
|
1519
|
-
mrb_value other;
|
|
1534
|
+
mrb_value other = mrb_get_arg1(mrb);
|
|
1520
1535
|
mrb_int n;
|
|
1521
1536
|
|
|
1522
|
-
mrb_get_args(mrb, "o", &other);
|
|
1523
1537
|
n = cmpnum(mrb, self, other);
|
|
1524
1538
|
if (n == -2) cmperr(mrb, self, other);
|
|
1525
1539
|
if (n <= 0) return mrb_true_value();
|
|
@@ -1527,12 +1541,11 @@ integral_le(mrb_state *mrb, mrb_value self)
|
|
|
1527
1541
|
}
|
|
1528
1542
|
|
|
1529
1543
|
static mrb_value
|
|
1530
|
-
|
|
1544
|
+
num_gt(mrb_state *mrb, mrb_value self)
|
|
1531
1545
|
{
|
|
1532
|
-
mrb_value other;
|
|
1546
|
+
mrb_value other = mrb_get_arg1(mrb);
|
|
1533
1547
|
mrb_int n;
|
|
1534
1548
|
|
|
1535
|
-
mrb_get_args(mrb, "o", &other);
|
|
1536
1549
|
n = cmpnum(mrb, self, other);
|
|
1537
1550
|
if (n == -2) cmperr(mrb, self, other);
|
|
1538
1551
|
if (n > 0) return mrb_true_value();
|
|
@@ -1540,12 +1553,11 @@ integral_gt(mrb_state *mrb, mrb_value self)
|
|
|
1540
1553
|
}
|
|
1541
1554
|
|
|
1542
1555
|
static mrb_value
|
|
1543
|
-
|
|
1556
|
+
num_ge(mrb_state *mrb, mrb_value self)
|
|
1544
1557
|
{
|
|
1545
|
-
mrb_value other;
|
|
1558
|
+
mrb_value other = mrb_get_arg1(mrb);
|
|
1546
1559
|
mrb_int n;
|
|
1547
1560
|
|
|
1548
|
-
mrb_get_args(mrb, "o", &other);
|
|
1549
1561
|
n = cmpnum(mrb, self, other);
|
|
1550
1562
|
if (n == -2) cmperr(mrb, self, other);
|
|
1551
1563
|
if (n >= 0) return mrb_true_value();
|
|
@@ -1558,7 +1570,7 @@ mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
|
|
|
1558
1570
|
mrb_value v;
|
|
1559
1571
|
|
|
1560
1572
|
switch (mrb_type(obj1)) {
|
|
1561
|
-
case
|
|
1573
|
+
case MRB_TT_INTEGER:
|
|
1562
1574
|
case MRB_TT_FLOAT:
|
|
1563
1575
|
return cmpnum(mrb, obj1, obj2);
|
|
1564
1576
|
case MRB_TT_STRING:
|
|
@@ -1566,10 +1578,10 @@ mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
|
|
|
1566
1578
|
return -2;
|
|
1567
1579
|
return mrb_str_cmp(mrb, obj1, obj2);
|
|
1568
1580
|
default:
|
|
1569
|
-
v =
|
|
1570
|
-
if (mrb_nil_p(v) || !
|
|
1581
|
+
v = mrb_funcall_id(mrb, obj1, MRB_SYM(cmp), 1, obj2);
|
|
1582
|
+
if (mrb_nil_p(v) || !mrb_integer_p(v))
|
|
1571
1583
|
return -2;
|
|
1572
|
-
return
|
|
1584
|
+
return mrb_integer(v);
|
|
1573
1585
|
}
|
|
1574
1586
|
}
|
|
1575
1587
|
|
|
@@ -1593,13 +1605,12 @@ num_infinite_p(mrb_state *mrb, mrb_value self)
|
|
|
1593
1605
|
* Returns a new float which is the sum of <code>float</code>
|
|
1594
1606
|
* and <code>other</code>.
|
|
1595
1607
|
*/
|
|
1596
|
-
#ifndef
|
|
1608
|
+
#ifndef MRB_NO_FLOAT
|
|
1597
1609
|
static mrb_value
|
|
1598
1610
|
flo_plus(mrb_state *mrb, mrb_value x)
|
|
1599
1611
|
{
|
|
1600
|
-
mrb_value y;
|
|
1612
|
+
mrb_value y = mrb_get_arg1(mrb);
|
|
1601
1613
|
|
|
1602
|
-
mrb_get_args(mrb, "o", &y);
|
|
1603
1614
|
return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
|
|
1604
1615
|
}
|
|
1605
1616
|
#endif
|
|
@@ -1608,72 +1619,81 @@ flo_plus(mrb_state *mrb, mrb_value x)
|
|
|
1608
1619
|
void
|
|
1609
1620
|
mrb_init_numeric(mrb_state *mrb)
|
|
1610
1621
|
{
|
|
1611
|
-
struct RClass *numeric, *integer
|
|
1612
|
-
#ifndef
|
|
1622
|
+
struct RClass *numeric, *integer;
|
|
1623
|
+
#ifndef MRB_NO_FLOAT
|
|
1613
1624
|
struct RClass *fl;
|
|
1614
1625
|
#endif
|
|
1615
1626
|
|
|
1616
|
-
integral = mrb_define_module(mrb, "Integral");
|
|
1617
|
-
mrb_define_method(mrb, integral,"**", integral_pow, MRB_ARGS_REQ(1));
|
|
1618
|
-
mrb_define_method(mrb, integral,"/", integral_div, MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.6 */
|
|
1619
|
-
mrb_define_method(mrb, integral,"quo", integral_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
|
|
1620
|
-
mrb_define_method(mrb, integral,"div", integral_idiv, MRB_ARGS_REQ(1));
|
|
1621
|
-
mrb_define_method(mrb, integral,"<=>", integral_cmp, MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.1 */
|
|
1622
|
-
mrb_define_method(mrb, integral,"<", integral_lt, MRB_ARGS_REQ(1));
|
|
1623
|
-
mrb_define_method(mrb, integral,"<=", integral_le, MRB_ARGS_REQ(1));
|
|
1624
|
-
mrb_define_method(mrb, integral,">", integral_gt, MRB_ARGS_REQ(1));
|
|
1625
|
-
mrb_define_method(mrb, integral,">=", integral_ge, MRB_ARGS_REQ(1));
|
|
1626
|
-
mrb_define_method(mrb, integral,"__coerce_step_counter", integral_coerce_step_counter, MRB_ARGS_REQ(2));
|
|
1627
|
-
|
|
1628
1627
|
/* Numeric Class */
|
|
1629
1628
|
numeric = mrb_define_class(mrb, "Numeric", mrb->object_class); /* 15.2.7 */
|
|
1630
1629
|
mrb_define_method(mrb, numeric, "finite?", num_finite_p, MRB_ARGS_NONE());
|
|
1631
1630
|
mrb_define_method(mrb, numeric, "infinite?",num_infinite_p, MRB_ARGS_NONE());
|
|
1632
1631
|
|
|
1633
1632
|
/* Integer Class */
|
|
1634
|
-
integer = mrb_define_class(mrb, "Integer", numeric);
|
|
1635
|
-
MRB_SET_INSTANCE_TT(integer,
|
|
1633
|
+
mrb->integer_class = integer = mrb_define_class(mrb, "Integer", numeric); /* 15.2.8 */
|
|
1634
|
+
MRB_SET_INSTANCE_TT(integer, MRB_TT_INTEGER);
|
|
1636
1635
|
mrb_undef_class_method(mrb, integer, "new");
|
|
1636
|
+
mrb_define_method(mrb, integer, "**", int_pow, MRB_ARGS_REQ(1));
|
|
1637
|
+
mrb_define_method(mrb, integer, "/", int_div, MRB_ARGS_REQ(1)); /* 15.2.8.3.6 */
|
|
1638
|
+
mrb_define_method(mrb, integer, "quo", int_quo, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
|
|
1639
|
+
mrb_define_method(mrb, integer, "div", int_div, MRB_ARGS_REQ(1));
|
|
1640
|
+
mrb_define_method(mrb, integer, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */
|
|
1641
|
+
mrb_define_method(mrb, integer, "<", num_lt, MRB_ARGS_REQ(1));
|
|
1642
|
+
mrb_define_method(mrb, integer, "<=", num_le, MRB_ARGS_REQ(1));
|
|
1643
|
+
mrb_define_method(mrb, integer, ">", num_gt, MRB_ARGS_REQ(1));
|
|
1644
|
+
mrb_define_method(mrb, integer, ">=", num_ge, MRB_ARGS_REQ(1));
|
|
1645
|
+
|
|
1637
1646
|
mrb_define_method(mrb, integer, "to_i", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.24 */
|
|
1638
1647
|
mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE());
|
|
1639
|
-
#ifndef
|
|
1640
|
-
mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.
|
|
1641
|
-
mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.
|
|
1642
|
-
mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.
|
|
1643
|
-
mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.
|
|
1648
|
+
#ifndef MRB_NO_FLOAT
|
|
1649
|
+
mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.14 */
|
|
1650
|
+
mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.17 */
|
|
1651
|
+
mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.20 */
|
|
1652
|
+
mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.26 */
|
|
1644
1653
|
#endif
|
|
1645
1654
|
|
|
1646
|
-
/*
|
|
1647
|
-
|
|
1648
|
-
mrb_define_method(mrb,
|
|
1649
|
-
mrb_define_method(mrb,
|
|
1650
|
-
mrb_define_method(mrb,
|
|
1651
|
-
mrb_define_method(mrb,
|
|
1652
|
-
mrb_define_method(mrb,
|
|
1653
|
-
mrb_define_method(mrb,
|
|
1654
|
-
mrb_define_method(mrb,
|
|
1655
|
-
mrb_define_method(mrb,
|
|
1656
|
-
mrb_define_method(mrb,
|
|
1657
|
-
mrb_define_method(mrb,
|
|
1658
|
-
|
|
1659
|
-
mrb_define_method(mrb,
|
|
1660
|
-
#ifndef MRB_WITHOUT_FLOAT
|
|
1661
|
-
mrb_define_method(mrb, fixnum, "to_f", fix_to_f, MRB_ARGS_NONE()); /* 15.2.8.3.23 */
|
|
1655
|
+
mrb_define_method(mrb, integer, "+", int_plus, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */
|
|
1656
|
+
mrb_define_method(mrb, integer, "-", int_minus, MRB_ARGS_REQ(1)); /* 15.2.8.3.2 */
|
|
1657
|
+
mrb_define_method(mrb, integer, "*", int_mul, MRB_ARGS_REQ(1)); /* 15.2.8.3.3 */
|
|
1658
|
+
mrb_define_method(mrb, integer, "%", int_mod, MRB_ARGS_REQ(1)); /* 15.2.8.3.5 */
|
|
1659
|
+
mrb_define_method(mrb, integer, "==", int_equal, MRB_ARGS_REQ(1)); /* 15.2.8.3.7 */
|
|
1660
|
+
mrb_define_method(mrb, integer, "~", int_rev, MRB_ARGS_NONE()); /* 15.2.8.3.8 */
|
|
1661
|
+
mrb_define_method(mrb, integer, "&", int_and, MRB_ARGS_REQ(1)); /* 15.2.8.3.9 */
|
|
1662
|
+
mrb_define_method(mrb, integer, "|", int_or, MRB_ARGS_REQ(1)); /* 15.2.8.3.10 */
|
|
1663
|
+
mrb_define_method(mrb, integer, "^", int_xor, MRB_ARGS_REQ(1)); /* 15.2.8.3.11 */
|
|
1664
|
+
mrb_define_method(mrb, integer, "<<", int_lshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.12 */
|
|
1665
|
+
mrb_define_method(mrb, integer, ">>", int_rshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.13 */
|
|
1666
|
+
mrb_define_method(mrb, integer, "eql?", int_eql, MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */
|
|
1667
|
+
#ifndef MRB_NO_FLOAT
|
|
1668
|
+
mrb_define_method(mrb, integer, "to_f", int_to_f, MRB_ARGS_NONE()); /* 15.2.8.3.23 */
|
|
1662
1669
|
#endif
|
|
1663
|
-
mrb_define_method(mrb,
|
|
1664
|
-
mrb_define_method(mrb,
|
|
1665
|
-
mrb_define_method(mrb,
|
|
1670
|
+
mrb_define_method(mrb, integer, "to_s", int_to_s, MRB_ARGS_OPT(1)); /* 15.2.8.3.25 */
|
|
1671
|
+
mrb_define_method(mrb, integer, "inspect", int_to_s, MRB_ARGS_OPT(1));
|
|
1672
|
+
mrb_define_method(mrb, integer, "divmod", int_divmod, MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */
|
|
1673
|
+
mrb_define_method(mrb, integer, "__coerce_step_counter", coerce_step_counter, MRB_ARGS_REQ(2));
|
|
1666
1674
|
|
|
1667
|
-
|
|
1675
|
+
/* Fixnum Class for compatibility */
|
|
1676
|
+
mrb_define_const(mrb, mrb->object_class, "Fixnum", mrb_obj_value(integer));
|
|
1677
|
+
|
|
1678
|
+
#ifndef MRB_NO_FLOAT
|
|
1668
1679
|
/* Float Class */
|
|
1669
1680
|
mrb->float_class = fl = mrb_define_class(mrb, "Float", numeric); /* 15.2.9 */
|
|
1670
1681
|
MRB_SET_INSTANCE_TT(fl, MRB_TT_FLOAT);
|
|
1671
1682
|
mrb_undef_class_method(mrb, fl, "new");
|
|
1672
|
-
mrb_define_method(mrb, fl, "
|
|
1673
|
-
mrb_define_method(mrb, fl, "
|
|
1674
|
-
mrb_define_method(mrb, fl, "
|
|
1675
|
-
mrb_define_method(mrb, fl, "
|
|
1676
|
-
mrb_define_method(mrb, fl, "
|
|
1683
|
+
mrb_define_method(mrb, fl, "**", flo_pow, MRB_ARGS_REQ(1));
|
|
1684
|
+
mrb_define_method(mrb, fl, "/", flo_div, MRB_ARGS_REQ(1)); /* 15.2.9.3.6 */
|
|
1685
|
+
mrb_define_method(mrb, fl, "quo", flo_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
|
|
1686
|
+
mrb_define_method(mrb, fl, "div", flo_idiv, MRB_ARGS_REQ(1));
|
|
1687
|
+
mrb_define_method(mrb, fl, "+", flo_plus, MRB_ARGS_REQ(1)); /* 15.2.9.3.3 */
|
|
1688
|
+
mrb_define_method(mrb, fl, "-", flo_minus, MRB_ARGS_REQ(1)); /* 15.2.9.3.4 */
|
|
1689
|
+
mrb_define_method(mrb, fl, "*", flo_mul, MRB_ARGS_REQ(1)); /* 15.2.9.3.5 */
|
|
1690
|
+
mrb_define_method(mrb, fl, "%", flo_mod, MRB_ARGS_REQ(1)); /* 15.2.9.3.7 */
|
|
1691
|
+
mrb_define_method(mrb, fl, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.9.3.1 */
|
|
1692
|
+
mrb_define_method(mrb, fl, "<", num_lt, MRB_ARGS_REQ(1));
|
|
1693
|
+
mrb_define_method(mrb, fl, "<=", num_le, MRB_ARGS_REQ(1));
|
|
1694
|
+
mrb_define_method(mrb, fl, ">", num_gt, MRB_ARGS_REQ(1));
|
|
1695
|
+
mrb_define_method(mrb, fl, ">=", num_ge, MRB_ARGS_REQ(1));
|
|
1696
|
+
mrb_define_method(mrb, fl, "==", flo_eq, MRB_ARGS_REQ(1)); /* 15.2.9.3.2 */
|
|
1677
1697
|
mrb_define_method(mrb, fl, "~", flo_rev, MRB_ARGS_NONE());
|
|
1678
1698
|
mrb_define_method(mrb, fl, "&", flo_and, MRB_ARGS_REQ(1));
|
|
1679
1699
|
mrb_define_method(mrb, fl, "|", flo_or, MRB_ARGS_REQ(1));
|
|
@@ -1697,12 +1717,10 @@ mrb_init_numeric(mrb_state *mrb)
|
|
|
1697
1717
|
mrb_define_method(mrb, fl, "nan?", flo_nan_p, MRB_ARGS_NONE());
|
|
1698
1718
|
|
|
1699
1719
|
#ifdef INFINITY
|
|
1700
|
-
|
|
1720
|
+
mrb_define_const_id(mrb, fl, MRB_SYM(INFINITY), mrb_float_value(mrb, INFINITY));
|
|
1701
1721
|
#endif
|
|
1702
1722
|
#ifdef NAN
|
|
1703
|
-
|
|
1723
|
+
mrb_define_const_id(mrb, fl, MRB_SYM(NAN), mrb_float_value(mrb, NAN));
|
|
1704
1724
|
#endif
|
|
1705
|
-
|
|
1706
|
-
mrb_include_module(mrb, fl, integral);
|
|
1707
1725
|
#endif
|
|
1708
1726
|
}
|