script_core 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|