script_core 0.1.1 → 0.2.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/.gitignore +2 -0
- data/.rubocop.yml +8 -6
- data/.ruby-version +1 -1
- data/Gemfile +2 -1
- data/bin/sandbox +1 -1
- data/ext/enterprise_script_service/Rakefile +1 -1
- data/ext/enterprise_script_service/flags.rb +5 -0
- data/ext/enterprise_script_service/libseccomp/CHANGELOG +15 -0
- data/ext/enterprise_script_service/libseccomp/CREDITS +3 -0
- data/ext/enterprise_script_service/libseccomp/Makefile.am +1 -1
- data/ext/enterprise_script_service/libseccomp/README.md +1 -1
- data/ext/enterprise_script_service/libseccomp/SECURITY.md +45 -0
- data/ext/enterprise_script_service/libseccomp/configure.ac +3 -3
- data/ext/enterprise_script_service/libseccomp/doc/admin/MAINTAINER_PROCESS.md +95 -0
- data/ext/enterprise_script_service/libseccomp/{RELEASE_PROCESS.md → doc/admin/RELEASE_PROCESS.md} +9 -1
- data/ext/enterprise_script_service/libseccomp/include/Makefile.am +1 -1
- data/ext/enterprise_script_service/libseccomp/include/seccomp-syscalls.h +2292 -0
- data/ext/enterprise_script_service/libseccomp/include/seccomp.h.in +3 -1065
- data/ext/enterprise_script_service/libseccomp/src/arch-aarch64-syscalls.c +35 -3
- data/ext/enterprise_script_service/libseccomp/src/arch-arm-syscalls.c +35 -3
- data/ext/enterprise_script_service/libseccomp/src/arch-mips-syscalls.c +43 -11
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64-syscalls.c +33 -1
- data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32-syscalls.c +33 -1
- data/ext/enterprise_script_service/libseccomp/src/arch-parisc-syscalls.c +34 -2
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc-syscalls.c +43 -11
- data/ext/enterprise_script_service/libseccomp/src/arch-ppc64-syscalls.c +44 -12
- data/ext/enterprise_script_service/libseccomp/src/arch-s390-syscalls.c +46 -14
- data/ext/enterprise_script_service/libseccomp/src/arch-s390.c +142 -18
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x-syscalls.c +47 -15
- data/ext/enterprise_script_service/libseccomp/src/arch-s390x.c +143 -17
- data/ext/enterprise_script_service/libseccomp/src/arch-x32-syscalls.c +33 -1
- data/ext/enterprise_script_service/libseccomp/src/arch-x86-syscalls.c +94 -12
- data/ext/enterprise_script_service/libseccomp/src/arch-x86.c +142 -19
- data/ext/enterprise_script_service/libseccomp/src/arch-x86_64-syscalls.c +33 -1
- data/ext/enterprise_script_service/libseccomp/src/db.c +1 -0
- data/ext/enterprise_script_service/libseccomp/src/gen_bpf.c +10 -3
- data/ext/enterprise_script_service/libseccomp/src/python/Makefile.am +4 -4
- data/ext/enterprise_script_service/libseccomp/src/python/seccomp.pyx +2 -0
- data/ext/enterprise_script_service/libseccomp/tests/.gitignore +1 -0
- data/ext/enterprise_script_service/libseccomp/tests/50-sim-hash_collision.c +98 -0
- data/ext/enterprise_script_service/libseccomp/tests/50-sim-hash_collision.py +61 -0
- data/ext/enterprise_script_service/libseccomp/tests/50-sim-hash_collision.tests +18 -0
- data/ext/enterprise_script_service/libseccomp/tests/Makefile.am +6 -3
- data/ext/enterprise_script_service/libseccomp/tools/Makefile.am +0 -2
- data/ext/enterprise_script_service/libseccomp/tools/check-syntax +1 -0
- data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_sim.c +2 -0
- data/ext/enterprise_script_service/mruby-mpdecimal/src/ext.c +1 -1
- data/ext/enterprise_script_service/mruby/.gitignore +2 -2
- data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +10 -3
- data/ext/enterprise_script_service/mruby/Doxyfile +2408 -0
- data/ext/enterprise_script_service/mruby/README.md +21 -8
- data/ext/enterprise_script_service/mruby/Rakefile +4 -13
- data/ext/enterprise_script_service/mruby/appveyor_config.rb +1 -1
- data/ext/enterprise_script_service/mruby/build_config.rb +3 -3
- data/ext/enterprise_script_service/mruby/doc/guides/compile.md +42 -42
- data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +1 -1
- data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +45 -6
- data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +5 -0
- data/ext/enterprise_script_service/mruby/doc/limitations.md +88 -38
- data/ext/enterprise_script_service/mruby/doc/mruby_logo_red_icon.png +0 -0
- data/ext/enterprise_script_service/mruby/doc/opcode.md +94 -94
- data/ext/enterprise_script_service/mruby/include/mrbconf.h +74 -11
- data/ext/enterprise_script_service/mruby/include/mruby.h +242 -146
- data/ext/enterprise_script_service/mruby/include/mruby/array.h +7 -7
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +2 -9
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +11 -10
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +104 -69
- data/ext/enterprise_script_service/mruby/include/mruby/class.h +7 -5
- data/ext/enterprise_script_service/mruby/include/mruby/common.h +9 -7
- data/ext/enterprise_script_service/mruby/include/mruby/compile.h +6 -6
- data/ext/enterprise_script_service/mruby/include/mruby/data.h +5 -5
- data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/dump.h +3 -7
- data/ext/enterprise_script_service/mruby/include/mruby/error.h +34 -6
- data/ext/enterprise_script_service/mruby/include/mruby/gc.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/hash.h +4 -11
- data/ext/enterprise_script_service/mruby/include/mruby/irep.h +16 -4
- data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -4
- data/ext/enterprise_script_service/mruby/include/mruby/khash.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +41 -7
- data/ext/enterprise_script_service/mruby/include/mruby/object.h +8 -9
- data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/ops.h +6 -6
- data/ext/enterprise_script_service/mruby/include/mruby/proc.h +19 -13
- data/ext/enterprise_script_service/mruby/include/mruby/range.h +10 -4
- data/ext/enterprise_script_service/mruby/include/mruby/re.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/string.h +130 -107
- data/ext/enterprise_script_service/mruby/include/mruby/throw.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/value.h +137 -49
- data/ext/enterprise_script_service/mruby/include/mruby/variable.h +3 -5
- data/ext/enterprise_script_service/mruby/include/mruby/version.h +24 -10
- data/ext/enterprise_script_service/mruby/lib/mruby-core-ext.rb +2 -39
- data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +32 -15
- data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +63 -17
- data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +24 -10
- data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +11 -7
- data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +81 -0
- data/ext/enterprise_script_service/mruby/minirake +27 -11
- data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +3 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrbgem.rake +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +47 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +3 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/test/array.rb +50 -29
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +3 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c +3 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +4 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +28 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +1 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +75 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +134 -90
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +7 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +69 -46
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +0 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +51 -59
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +430 -241
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrbgem.rake +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +122 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +249 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +153 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-chain/mrblib/chain.rb +19 -17
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-chain/test/enum_chain.rb +41 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +30 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-ext/test/enum.rb +8 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrbgem.rake +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +46 -14
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +51 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/src/exception.c +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +47 -44
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/test/eval.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-exit/src/mruby-exit.c +9 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +16 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/test/fiber.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +0 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +3 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +3 -7
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +1 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +0 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +24 -38
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/kernel.rb +16 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +19 -18
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +5 -16
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +54 -42
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +24 -20
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file_test.rb +4 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +41 -35
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +9 -36
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +9 -27
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/test/kernel.rb +2 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +5 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +39 -24
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +48 -17
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/mrblib/method.rb +0 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +134 -101
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +9 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +1 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +17 -37
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +0 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/mrblib/object.rb +15 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +35 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/test/nil.rb +4 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +1 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +28 -23
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/test/pack.rb +43 -49
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +3 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +6 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.rb +21 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +157 -124
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +72 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +38 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +26 -11
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +111 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrbgem.rake +5 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +117 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +209 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +308 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +10 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +22 -24
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrbgem.rake +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +8 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +116 -117
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/test/numeric.rb +29 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/test/range.rb +26 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/test/string.rb +32 -50
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +5 -7
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +43 -57
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/test/struct.rb +16 -11
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +152 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +4 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +200 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/include/mruby/time.h +2 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +199 -68
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/test/time.rb +81 -46
- data/ext/enterprise_script_service/mruby/mrblib/array.rb +14 -16
- data/ext/enterprise_script_service/mruby/mrblib/enum.rb +13 -9
- data/ext/enterprise_script_service/mruby/mrblib/hash.rb +5 -7
- data/ext/enterprise_script_service/mruby/mrblib/kernel.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrblib/range.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrblib/string.rb +55 -112
- data/ext/enterprise_script_service/mruby/mruby-source.gemspec +1 -1
- data/ext/enterprise_script_service/mruby/oss-fuzz/config/mruby.dict +105 -0
- data/ext/enterprise_script_service/mruby/oss-fuzz/config/mruby_fuzzer.options +5 -0
- data/ext/enterprise_script_service/mruby/oss-fuzz/config/mruby_proto_fuzzer.options +4 -0
- data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_fuzzer.c +18 -0
- data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +44 -0
- data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.cpp +455 -0
- data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +55 -0
- data/ext/enterprise_script_service/mruby/oss-fuzz/ruby.proto +201 -0
- data/ext/enterprise_script_service/mruby/src/array.c +95 -46
- data/ext/enterprise_script_service/mruby/src/backtrace.c +6 -8
- data/ext/enterprise_script_service/mruby/src/class.c +370 -278
- data/ext/enterprise_script_service/mruby/src/codedump.c +34 -34
- data/ext/enterprise_script_service/mruby/src/debug.c +2 -2
- data/ext/enterprise_script_service/mruby/src/dump.c +8 -6
- data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
- data/ext/enterprise_script_service/mruby/src/error.c +157 -55
- data/ext/enterprise_script_service/mruby/src/etc.c +13 -46
- data/ext/enterprise_script_service/mruby/src/fmt_fp.c +2 -2
- data/ext/enterprise_script_service/mruby/src/gc.c +30 -11
- data/ext/enterprise_script_service/mruby/src/hash.c +23 -14
- data/ext/enterprise_script_service/mruby/src/kernel.c +16 -54
- data/ext/enterprise_script_service/mruby/src/load.c +40 -76
- data/ext/enterprise_script_service/mruby/src/numeric.c +164 -94
- data/ext/enterprise_script_service/mruby/src/object.c +16 -39
- data/ext/enterprise_script_service/mruby/src/pool.c +0 -2
- data/ext/enterprise_script_service/mruby/src/proc.c +47 -48
- data/ext/enterprise_script_service/mruby/src/range.c +22 -35
- data/ext/enterprise_script_service/mruby/src/state.c +5 -94
- data/ext/enterprise_script_service/mruby/src/string.c +874 -710
- data/ext/enterprise_script_service/mruby/src/symbol.c +73 -48
- data/ext/enterprise_script_service/mruby/src/variable.c +58 -38
- data/ext/enterprise_script_service/mruby/src/vm.c +133 -304
- data/ext/enterprise_script_service/mruby/tasks/doc.rake +48 -0
- data/ext/enterprise_script_service/mruby/tasks/toolchains/clang.rake +3 -4
- data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +20 -19
- data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +0 -12
- data/ext/enterprise_script_service/mruby/test/assert.rb +186 -25
- data/ext/enterprise_script_service/mruby/test/t/array.rb +34 -6
- data/ext/enterprise_script_service/mruby/test/t/class.rb +26 -0
- data/ext/enterprise_script_service/mruby/test/t/enumerable.rb +2 -2
- data/ext/enterprise_script_service/mruby/test/t/float.rb +17 -17
- data/ext/enterprise_script_service/mruby/test/t/hash.rb +2 -0
- data/ext/enterprise_script_service/mruby/test/t/integer.rb +14 -6
- data/ext/enterprise_script_service/mruby/test/t/kernel.rb +38 -19
- data/ext/enterprise_script_service/mruby/test/t/module.rb +87 -14
- data/ext/enterprise_script_service/mruby/test/t/numeric.rb +65 -23
- data/ext/enterprise_script_service/mruby/test/t/range.rb +4 -4
- data/ext/enterprise_script_service/mruby/test/t/string.rb +211 -49
- data/ext/enterprise_script_service/mruby/test/t/syntax.rb +19 -2
- data/ext/enterprise_script_service/mruby/test/t/vformat.rb +92 -0
- data/ext/enterprise_script_service/mruby/travis_config.rb +2 -2
- data/ext/enterprise_script_service/mruby_config.rb +10 -0
- data/ext/enterprise_script_service/mruby_engine.cpp +2 -2
- data/ext/enterprise_script_service/mruby_engine.gembox +1 -0
- data/ext/enterprise_script_service/msgpack/CHANGELOG.md +14 -0
- data/ext/enterprise_script_service/msgpack/Files.cmake +4 -0
- data/ext/enterprise_script_service/msgpack/README.md +1 -1
- data/ext/enterprise_script_service/msgpack/appveyor.yml +1 -1
- data/ext/enterprise_script_service/msgpack/erb/v1/cpp03_msgpack_tuple.hpp.erb +1 -1
- data/ext/enterprise_script_service/msgpack/erb/v1/cpp03_msgpack_tuple_decl.hpp.erb +1 -1
- data/ext/enterprise_script_service/msgpack/erb/v1/cpp03_zone.hpp.erb +3 -3
- data/ext/enterprise_script_service/msgpack/example/boost/asio_send_recv.cpp +1 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/adaptor/cpp11/timespec.hpp +16 -0
- data/ext/enterprise_script_service/msgpack/include/msgpack/adaptor/wstring.hpp +15 -0
- data/ext/enterprise_script_service/msgpack/include/msgpack/object.h +2 -0
- data/ext/enterprise_script_service/msgpack/include/msgpack/pack_template.h +17 -9
- data/ext/enterprise_script_service/msgpack/include/msgpack/sysdep.h +27 -16
- data/ext/enterprise_script_service/msgpack/include/msgpack/type.hpp +2 -0
- data/ext/enterprise_script_service/msgpack/include/msgpack/unpack_template.h +5 -0
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/array_ref.hpp +0 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/check_container_size.hpp +1 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp11/chrono.hpp +5 -5
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp11/timespec.hpp +140 -0
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple.hpp +32 -32
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple_decl.hpp +32 -32
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple.hpp +6 -6
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp +10 -10
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/ext.hpp +1 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/fixint.hpp +5 -4
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/int.hpp +40 -13
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/int_decl.hpp +3 -2
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/wstring.hpp +121 -0
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/detail/cpp03_zone.hpp +3 -3
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/detail/cpp11_zone.hpp +3 -3
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/object.hpp +6 -6
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/object_fwd.hpp +1 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/pack.hpp +40 -5
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/unpack.hpp +11 -11
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/vrefbuffer.hpp +7 -7
- data/ext/enterprise_script_service/msgpack/include/msgpack/v1/zbuffer.hpp +5 -5
- data/ext/enterprise_script_service/msgpack/include/msgpack/v2/adaptor/int_decl.hpp +1 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v2/create_object_visitor.hpp +1 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v2/parse.hpp +13 -13
- data/ext/enterprise_script_service/msgpack/include/msgpack/v2/x3_parse.hpp +28 -26
- data/ext/enterprise_script_service/msgpack/include/msgpack/v3/adaptor/int_decl.hpp +1 -1
- data/ext/enterprise_script_service/msgpack/include/msgpack/v3/parse.hpp +13 -13
- data/ext/enterprise_script_service/msgpack/include/msgpack/version_master.h +2 -2
- data/ext/enterprise_script_service/msgpack/include/msgpack/zbuffer.h +6 -6
- data/ext/enterprise_script_service/msgpack/include/msgpack/zone.h +1 -1
- data/ext/enterprise_script_service/msgpack/src/objectc.c +83 -148
- data/ext/enterprise_script_service/msgpack/src/unpack.c +73 -47
- data/ext/enterprise_script_service/msgpack/test/CMakeLists.txt +1 -1
- data/ext/enterprise_script_service/msgpack/test/array_ref.cpp +5 -0
- data/ext/enterprise_script_service/msgpack/test/boost_fusion.cpp +5 -0
- data/ext/enterprise_script_service/msgpack/test/boost_optional.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/boost_string_ref.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/boost_string_view.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/boost_variant.cpp +15 -9
- data/ext/enterprise_script_service/msgpack/test/buffer.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/carray.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/cases.cpp +7 -1
- data/ext/enterprise_script_service/msgpack/test/convert.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/fixint.cpp +7 -1
- data/ext/enterprise_script_service/msgpack/test/fixint_c.cpp +6 -1
- data/ext/enterprise_script_service/msgpack/test/fuzz_unpack_pack_fuzzer_cpp11.cpp +5 -0
- data/ext/enterprise_script_service/msgpack/test/iterator_cpp11.cpp +8 -2
- data/ext/enterprise_script_service/msgpack/test/json.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/limit.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_basic.cpp +128 -6
- data/ext/enterprise_script_service/msgpack/test/msgpack_c.cpp +7 -2
- data/ext/enterprise_script_service/msgpack/test/msgpack_container.cpp +20 -3
- data/ext/enterprise_script_service/msgpack/test/msgpack_cpp11.cpp +159 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_cpp17.cpp +5 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_stream.cpp +8 -3
- data/ext/enterprise_script_service/msgpack/test/msgpack_tuple.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_vref.cpp +5 -0
- data/ext/enterprise_script_service/msgpack/test/msgpack_x3_parse.cpp +23 -18
- data/ext/enterprise_script_service/msgpack/test/object.cpp +77 -45
- data/ext/enterprise_script_service/msgpack/test/object_with_zone.cpp +28 -10
- data/ext/enterprise_script_service/msgpack/test/pack_unpack.cpp +25 -18
- data/ext/enterprise_script_service/msgpack/test/pack_unpack_c.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/raw.cpp +17 -12
- data/ext/enterprise_script_service/msgpack/test/reference.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/reference_cpp11.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/reference_wrapper_cpp11.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/shared_ptr_cpp11.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/size_equal_only.cpp +6 -2
- data/ext/enterprise_script_service/msgpack/test/streaming.cpp +10 -3
- data/ext/enterprise_script_service/msgpack/test/streaming_c.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/unique_ptr_cpp11.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/user_class.cpp +5 -0
- data/ext/enterprise_script_service/msgpack/test/version.cpp +6 -0
- data/ext/enterprise_script_service/msgpack/test/visitor.cpp +7 -0
- data/ext/enterprise_script_service/msgpack/test/zone.cpp +6 -0
- data/lib/script_core/version.rb +1 -1
- data/lib/tasks/mruby/engine.gembox.example +1 -0
- data/lib/tasks/script_core.rake +21 -3
- data/spec/dummy/app/helpers/fields_helper.rb +2 -2
- data/spec/dummy/mruby/engine.gembox +1 -0
- data/spec/script_core_spec.rb +1 -1
- metadata +38 -22
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/.gitignore +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/.travis.yml +0 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/run_test.rb +0 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/mrblib/kernel.rb +0 -15
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/mrblib/unbound_method.rb +0 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/.gitignore +0 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/.travis.yml +0 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/packtest.rb +0 -157
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/run_test.rb +0 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/mt19937ar.c +0 -224
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/mt19937ar.h +0 -80
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.h +0 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/.gitignore +0 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/.travis.yml +0 -29
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/.travis_build_config.rb +0 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/Rakefile +0 -29
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/.travis.yml +0 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/run_test.rb +0 -28
|
@@ -102,8 +102,9 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag
|
|
|
102
102
|
}
|
|
103
103
|
else {
|
|
104
104
|
size_t data_len = sizeof(mrb_code) * irep->ilen;
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
void *buf = mrb_malloc(mrb, data_len);
|
|
106
|
+
irep->iseq = (mrb_code *)buf;
|
|
107
|
+
memcpy(buf, src, data_len);
|
|
107
108
|
src += data_len;
|
|
108
109
|
}
|
|
109
110
|
}
|
|
@@ -233,66 +234,6 @@ read_section_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags)
|
|
|
233
234
|
return read_irep_record(mrb, bin, &len, flags);
|
|
234
235
|
}
|
|
235
236
|
|
|
236
|
-
/* ignore lineno record */
|
|
237
|
-
static int
|
|
238
|
-
read_lineno_record_1(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep, size_t *len)
|
|
239
|
-
{
|
|
240
|
-
size_t i, fname_len, niseq;
|
|
241
|
-
|
|
242
|
-
*len = 0;
|
|
243
|
-
bin += sizeof(uint32_t); /* record size */
|
|
244
|
-
*len += sizeof(uint32_t);
|
|
245
|
-
fname_len = bin_to_uint16(bin);
|
|
246
|
-
bin += sizeof(uint16_t);
|
|
247
|
-
*len += sizeof(uint16_t);
|
|
248
|
-
bin += fname_len;
|
|
249
|
-
*len += fname_len;
|
|
250
|
-
|
|
251
|
-
niseq = (size_t)bin_to_uint32(bin);
|
|
252
|
-
bin += sizeof(uint32_t); /* niseq */
|
|
253
|
-
*len += sizeof(uint32_t);
|
|
254
|
-
|
|
255
|
-
if (SIZE_ERROR_MUL(niseq, sizeof(uint16_t))) {
|
|
256
|
-
return MRB_DUMP_GENERAL_FAILURE;
|
|
257
|
-
}
|
|
258
|
-
for (i = 0; i < niseq; i++) {
|
|
259
|
-
bin += sizeof(uint16_t); /* niseq */
|
|
260
|
-
*len += sizeof(uint16_t);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
return MRB_DUMP_OK;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
static int
|
|
267
|
-
read_lineno_record(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep, size_t *lenp)
|
|
268
|
-
{
|
|
269
|
-
int result = read_lineno_record_1(mrb, bin, irep, lenp);
|
|
270
|
-
int i;
|
|
271
|
-
|
|
272
|
-
if (result != MRB_DUMP_OK) return result;
|
|
273
|
-
for (i = 0; i < irep->rlen; i++) {
|
|
274
|
-
size_t len;
|
|
275
|
-
|
|
276
|
-
result = read_lineno_record(mrb, bin, irep->reps[i], &len);
|
|
277
|
-
if (result != MRB_DUMP_OK) break;
|
|
278
|
-
bin += len;
|
|
279
|
-
*lenp += len;
|
|
280
|
-
}
|
|
281
|
-
return result;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
static int
|
|
285
|
-
read_section_lineno(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep)
|
|
286
|
-
{
|
|
287
|
-
size_t len;
|
|
288
|
-
|
|
289
|
-
len = 0;
|
|
290
|
-
bin += sizeof(struct rite_section_lineno_header);
|
|
291
|
-
|
|
292
|
-
/* Read Binary Data Section */
|
|
293
|
-
return read_lineno_record(mrb, bin, irep, &len);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
237
|
static int
|
|
297
238
|
read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, size_t *record_len, const mrb_sym *filenames, size_t filenames_len)
|
|
298
239
|
{
|
|
@@ -519,10 +460,14 @@ lv_exit:
|
|
|
519
460
|
}
|
|
520
461
|
|
|
521
462
|
static int
|
|
522
|
-
read_binary_header(const uint8_t *bin, size_t *bin_size, uint16_t *crc, uint8_t *flags)
|
|
463
|
+
read_binary_header(const uint8_t *bin, size_t bufsize, size_t *bin_size, uint16_t *crc, uint8_t *flags)
|
|
523
464
|
{
|
|
524
465
|
const struct rite_binary_header *header = (const struct rite_binary_header *)bin;
|
|
525
466
|
|
|
467
|
+
if (bufsize < sizeof(struct rite_binary_header)) {
|
|
468
|
+
return MRB_DUMP_READ_FAULT;
|
|
469
|
+
}
|
|
470
|
+
|
|
526
471
|
if (memcmp(header->binary_ident, RITE_BINARY_IDENT, sizeof(header->binary_ident)) == 0) {
|
|
527
472
|
if (bigendian_p())
|
|
528
473
|
*flags |= FLAG_BYTEORDER_NATIVE;
|
|
@@ -539,16 +484,24 @@ read_binary_header(const uint8_t *bin, size_t *bin_size, uint16_t *crc, uint8_t
|
|
|
539
484
|
return MRB_DUMP_INVALID_FILE_HEADER;
|
|
540
485
|
}
|
|
541
486
|
|
|
487
|
+
if (memcmp(header->binary_version, RITE_BINARY_FORMAT_VER, sizeof(header->binary_version)) != 0) {
|
|
488
|
+
return MRB_DUMP_INVALID_FILE_HEADER;
|
|
489
|
+
}
|
|
490
|
+
|
|
542
491
|
if (crc) {
|
|
543
492
|
*crc = bin_to_uint16(header->binary_crc);
|
|
544
493
|
}
|
|
545
494
|
*bin_size = (size_t)bin_to_uint32(header->binary_size);
|
|
546
495
|
|
|
496
|
+
if (bufsize < *bin_size) {
|
|
497
|
+
return MRB_DUMP_READ_FAULT;
|
|
498
|
+
}
|
|
499
|
+
|
|
547
500
|
return MRB_DUMP_OK;
|
|
548
501
|
}
|
|
549
502
|
|
|
550
503
|
static mrb_irep*
|
|
551
|
-
read_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags)
|
|
504
|
+
read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags)
|
|
552
505
|
{
|
|
553
506
|
int result;
|
|
554
507
|
mrb_irep *irep = NULL;
|
|
@@ -561,7 +514,7 @@ read_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags)
|
|
|
561
514
|
return NULL;
|
|
562
515
|
}
|
|
563
516
|
|
|
564
|
-
result = read_binary_header(bin, &bin_size, &crc, &flags);
|
|
517
|
+
result = read_binary_header(bin, bufsize, &bin_size, &crc, &flags);
|
|
565
518
|
if (result != MRB_DUMP_OK) {
|
|
566
519
|
return NULL;
|
|
567
520
|
}
|
|
@@ -578,13 +531,6 @@ read_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags)
|
|
|
578
531
|
irep = read_section_irep(mrb, bin, flags);
|
|
579
532
|
if (!irep) return NULL;
|
|
580
533
|
}
|
|
581
|
-
else if (memcmp(section_header->section_ident, RITE_SECTION_LINENO_IDENT, sizeof(section_header->section_ident)) == 0) {
|
|
582
|
-
if (!irep) return NULL; /* corrupted data */
|
|
583
|
-
result = read_section_lineno(mrb, bin, irep);
|
|
584
|
-
if (result < MRB_DUMP_OK) {
|
|
585
|
-
return NULL;
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
534
|
else if (memcmp(section_header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(section_header->section_ident)) == 0) {
|
|
589
535
|
if (!irep) return NULL; /* corrupted data */
|
|
590
536
|
result = read_section_debug(mrb, bin, irep, flags);
|
|
@@ -608,13 +554,19 @@ read_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags)
|
|
|
608
554
|
mrb_irep*
|
|
609
555
|
mrb_read_irep(mrb_state *mrb, const uint8_t *bin)
|
|
610
556
|
{
|
|
611
|
-
#
|
|
557
|
+
#if defined(MRB_USE_LINK_TIME_RO_DATA_P) || defined(MRB_USE_CUSTOM_RO_DATA_P)
|
|
612
558
|
uint8_t flags = mrb_ro_data_p((char*)bin) ? FLAG_SRC_STATIC : FLAG_SRC_MALLOC;
|
|
613
559
|
#else
|
|
614
560
|
uint8_t flags = FLAG_SRC_STATIC;
|
|
615
561
|
#endif
|
|
616
562
|
|
|
617
|
-
return read_irep(mrb, bin, flags);
|
|
563
|
+
return read_irep(mrb, bin, (size_t)-1, flags);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
MRB_API mrb_irep*
|
|
567
|
+
mrb_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize)
|
|
568
|
+
{
|
|
569
|
+
return read_irep(mrb, (const uint8_t *)buf, bufsize, FLAG_SRC_MALLOC);
|
|
618
570
|
}
|
|
619
571
|
|
|
620
572
|
void mrb_exc_set(mrb_state *mrb, mrb_value exc);
|
|
@@ -650,12 +602,24 @@ mrb_load_irep_cxt(mrb_state *mrb, const uint8_t *bin, mrbc_context *c)
|
|
|
650
602
|
return load_irep(mrb, mrb_read_irep(mrb, bin), c);
|
|
651
603
|
}
|
|
652
604
|
|
|
605
|
+
MRB_API mrb_value
|
|
606
|
+
mrb_load_irep_buf_cxt(mrb_state *mrb, const void *buf, size_t bufsize, mrbc_context *c)
|
|
607
|
+
{
|
|
608
|
+
return load_irep(mrb, mrb_read_irep_buf(mrb, buf, bufsize), c);
|
|
609
|
+
}
|
|
610
|
+
|
|
653
611
|
MRB_API mrb_value
|
|
654
612
|
mrb_load_irep(mrb_state *mrb, const uint8_t *bin)
|
|
655
613
|
{
|
|
656
614
|
return mrb_load_irep_cxt(mrb, bin, NULL);
|
|
657
615
|
}
|
|
658
616
|
|
|
617
|
+
MRB_API mrb_value
|
|
618
|
+
mrb_load_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize)
|
|
619
|
+
{
|
|
620
|
+
return mrb_load_irep_buf_cxt(mrb, buf, bufsize, NULL);
|
|
621
|
+
}
|
|
622
|
+
|
|
659
623
|
#ifndef MRB_DISABLE_STDIO
|
|
660
624
|
|
|
661
625
|
mrb_irep*
|
|
@@ -676,7 +640,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp)
|
|
|
676
640
|
if (fread(buf, header_size, 1, fp) == 0) {
|
|
677
641
|
goto irep_exit;
|
|
678
642
|
}
|
|
679
|
-
result = read_binary_header(buf, &buf_size, NULL, &flags);
|
|
643
|
+
result = read_binary_header(buf, (size_t)-1, &buf_size, NULL, &flags);
|
|
680
644
|
if (result != MRB_DUMP_OK || buf_size <= header_size) {
|
|
681
645
|
goto irep_exit;
|
|
682
646
|
}
|
|
@@ -685,7 +649,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp)
|
|
|
685
649
|
if (fread(buf+header_size, buf_size-header_size, 1, fp) == 0) {
|
|
686
650
|
goto irep_exit;
|
|
687
651
|
}
|
|
688
|
-
irep = read_irep(mrb, buf, FLAG_SRC_MALLOC);
|
|
652
|
+
irep = read_irep(mrb, buf, (size_t)-1, FLAG_SRC_MALLOC);
|
|
689
653
|
|
|
690
654
|
irep_exit:
|
|
691
655
|
mrb_free(mrb, buf);
|
|
@@ -44,6 +44,15 @@ mrb_to_flo(mrb_state *mrb, mrb_value val)
|
|
|
44
44
|
}
|
|
45
45
|
return mrb_float(val);
|
|
46
46
|
}
|
|
47
|
+
|
|
48
|
+
MRB_API mrb_value
|
|
49
|
+
mrb_int_value(mrb_state *mrb, mrb_float f)
|
|
50
|
+
{
|
|
51
|
+
if (FIXABLE_FLOAT(f)) {
|
|
52
|
+
return mrb_fixnum_value((mrb_int)f);
|
|
53
|
+
}
|
|
54
|
+
return mrb_float_value(mrb, f);
|
|
55
|
+
}
|
|
47
56
|
#endif
|
|
48
57
|
|
|
49
58
|
/*
|
|
@@ -56,7 +65,7 @@ mrb_to_flo(mrb_state *mrb, mrb_value val)
|
|
|
56
65
|
* 2.0**3 #=> 8.0
|
|
57
66
|
*/
|
|
58
67
|
static mrb_value
|
|
59
|
-
|
|
68
|
+
integral_pow(mrb_state *mrb, mrb_value x)
|
|
60
69
|
{
|
|
61
70
|
mrb_value y;
|
|
62
71
|
#ifndef MRB_WITHOUT_FLOAT
|
|
@@ -103,6 +112,25 @@ num_pow(mrb_state *mrb, mrb_value x)
|
|
|
103
112
|
#endif
|
|
104
113
|
}
|
|
105
114
|
|
|
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
|
+
mrb_get_args(mrb, "o", &y);
|
|
122
|
+
if (!mrb_fixnum_p(y)) {
|
|
123
|
+
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
124
|
+
}
|
|
125
|
+
return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
|
|
126
|
+
#else
|
|
127
|
+
mrb_float y;
|
|
128
|
+
|
|
129
|
+
mrb_get_args(mrb, "f", &y);
|
|
130
|
+
return mrb_int_value(mrb, mrb_to_flo(mrb, x) / y);
|
|
131
|
+
#endif
|
|
132
|
+
}
|
|
133
|
+
|
|
106
134
|
/* 15.2.8.3.4 */
|
|
107
135
|
/* 15.2.9.3.4 */
|
|
108
136
|
/*
|
|
@@ -114,19 +142,6 @@ num_pow(mrb_state *mrb, mrb_value x)
|
|
|
114
142
|
* result.
|
|
115
143
|
*/
|
|
116
144
|
|
|
117
|
-
mrb_value
|
|
118
|
-
mrb_num_div(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
119
|
-
{
|
|
120
|
-
#ifdef MRB_WITHOUT_FLOAT
|
|
121
|
-
if (!mrb_fixnum_p(y)) {
|
|
122
|
-
mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value");
|
|
123
|
-
}
|
|
124
|
-
return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y));
|
|
125
|
-
#else
|
|
126
|
-
return mrb_float_value(mrb, mrb_to_flo(mrb, x) / mrb_to_flo(mrb, y));
|
|
127
|
-
#endif
|
|
128
|
-
}
|
|
129
|
-
|
|
130
145
|
/* 15.2.9.3.19(x) */
|
|
131
146
|
/*
|
|
132
147
|
* call-seq:
|
|
@@ -136,7 +151,7 @@ mrb_num_div(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
136
151
|
*/
|
|
137
152
|
|
|
138
153
|
static mrb_value
|
|
139
|
-
|
|
154
|
+
integral_div(mrb_state *mrb, mrb_value x)
|
|
140
155
|
{
|
|
141
156
|
#ifdef MRB_WITHOUT_FLOAT
|
|
142
157
|
mrb_value y;
|
|
@@ -155,19 +170,19 @@ num_div(mrb_state *mrb, mrb_value x)
|
|
|
155
170
|
}
|
|
156
171
|
|
|
157
172
|
static mrb_value
|
|
158
|
-
|
|
173
|
+
integral_coerce_step_counter(mrb_state *mrb, mrb_value self)
|
|
159
174
|
{
|
|
160
|
-
mrb_value
|
|
175
|
+
mrb_value num, step;
|
|
161
176
|
|
|
162
177
|
mrb_get_args(mrb, "oo", &num, &step);
|
|
163
178
|
|
|
164
179
|
#ifndef MRB_WITHOUT_FLOAT
|
|
165
180
|
if (mrb_float_p(self) || mrb_float_p(num) || mrb_float_p(step)) {
|
|
166
|
-
|
|
181
|
+
return mrb_Float(mrb, self);
|
|
167
182
|
}
|
|
168
183
|
#endif
|
|
169
184
|
|
|
170
|
-
return
|
|
185
|
+
return self;
|
|
171
186
|
}
|
|
172
187
|
|
|
173
188
|
#ifndef MRB_WITHOUT_FLOAT
|
|
@@ -207,12 +222,12 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
|
|
|
207
222
|
char fmt[] = "%." MRB_STRINGIZE(FLO_TO_STR_PREC) "g";
|
|
208
223
|
mrb_value str = mrb_float_to_str(mrb, flt, fmt);
|
|
209
224
|
mrb_int len;
|
|
210
|
-
char *begp;
|
|
225
|
+
char *begp, *p, *endp;
|
|
211
226
|
|
|
212
227
|
insert_dot_zero:
|
|
213
228
|
begp = RSTRING_PTR(str);
|
|
214
229
|
len = RSTRING_LEN(str);
|
|
215
|
-
for (
|
|
230
|
+
for (p = begp, endp = p + len; p < endp; ++p) {
|
|
216
231
|
if (*p == '.') {
|
|
217
232
|
return str;
|
|
218
233
|
}
|
|
@@ -231,9 +246,6 @@ flo_to_s(mrb_state *mrb, mrb_value flt)
|
|
|
231
246
|
str = mrb_float_to_str(mrb, flt, fmt);
|
|
232
247
|
goto insert_dot_zero;
|
|
233
248
|
}
|
|
234
|
-
else {
|
|
235
|
-
mrb_str_cat(mrb, str, ".0", 2);
|
|
236
|
-
}
|
|
237
249
|
|
|
238
250
|
return str;
|
|
239
251
|
}
|
|
@@ -305,6 +317,8 @@ flodivmod(mrb_state *mrb, double x, double y, mrb_float *divp, mrb_float *modp)
|
|
|
305
317
|
div = (x - mod) / y;
|
|
306
318
|
if (modp && divp) div = round(div);
|
|
307
319
|
}
|
|
320
|
+
if (div == 0) div = 0.0;
|
|
321
|
+
if (mod == 0) mod = 0.0;
|
|
308
322
|
if (y*mod < 0) {
|
|
309
323
|
mod += y;
|
|
310
324
|
div -= 1.0;
|
|
@@ -421,7 +435,7 @@ value_int64(mrb_state *mrb, mrb_value x)
|
|
|
421
435
|
static mrb_value
|
|
422
436
|
int64_value(mrb_state *mrb, int64_t v)
|
|
423
437
|
{
|
|
424
|
-
if (
|
|
438
|
+
if (TYPED_FIXABLE(v,int64_t)) {
|
|
425
439
|
return mrb_fixnum_value((mrb_int)v);
|
|
426
440
|
}
|
|
427
441
|
return mrb_float_value(mrb, (mrb_float)v);
|
|
@@ -431,7 +445,6 @@ static mrb_value
|
|
|
431
445
|
flo_rev(mrb_state *mrb, mrb_value x)
|
|
432
446
|
{
|
|
433
447
|
int64_t v1;
|
|
434
|
-
mrb_get_args(mrb, "");
|
|
435
448
|
v1 = (int64_t)mrb_float(x);
|
|
436
449
|
return int64_value(mrb, ~v1);
|
|
437
450
|
}
|
|
@@ -484,6 +497,10 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
|
|
|
484
497
|
if (width < 0) {
|
|
485
498
|
while (width++) {
|
|
486
499
|
val /= 2;
|
|
500
|
+
if (val < 1.0) {
|
|
501
|
+
val = 0;
|
|
502
|
+
break;
|
|
503
|
+
}
|
|
487
504
|
}
|
|
488
505
|
#if defined(_ISOC99_SOURCE)
|
|
489
506
|
val = trunc(val);
|
|
@@ -503,14 +520,11 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
|
|
|
503
520
|
val *= 2;
|
|
504
521
|
}
|
|
505
522
|
}
|
|
506
|
-
|
|
507
|
-
return mrb_fixnum_value((mrb_int)val);
|
|
508
|
-
}
|
|
509
|
-
return mrb_float_value(mrb, val);
|
|
523
|
+
return mrb_int_value(mrb, val);
|
|
510
524
|
}
|
|
511
525
|
|
|
512
526
|
static mrb_value
|
|
513
|
-
|
|
527
|
+
flo_rshift(mrb_state *mrb, mrb_value x)
|
|
514
528
|
{
|
|
515
529
|
mrb_int width;
|
|
516
530
|
|
|
@@ -519,7 +533,7 @@ flo_lshift(mrb_state *mrb, mrb_value x)
|
|
|
519
533
|
}
|
|
520
534
|
|
|
521
535
|
static mrb_value
|
|
522
|
-
|
|
536
|
+
flo_lshift(mrb_state *mrb, mrb_value x)
|
|
523
537
|
{
|
|
524
538
|
mrb_int width;
|
|
525
539
|
|
|
@@ -612,10 +626,7 @@ flo_floor(mrb_state *mrb, mrb_value num)
|
|
|
612
626
|
mrb_float f = floor(mrb_float(num));
|
|
613
627
|
|
|
614
628
|
mrb_check_num_exact(mrb, f);
|
|
615
|
-
|
|
616
|
-
return mrb_float_value(mrb, f);
|
|
617
|
-
}
|
|
618
|
-
return mrb_fixnum_value((mrb_int)f);
|
|
629
|
+
return mrb_int_value(mrb, f);
|
|
619
630
|
}
|
|
620
631
|
|
|
621
632
|
/* 15.2.9.3.8 */
|
|
@@ -638,10 +649,7 @@ flo_ceil(mrb_state *mrb, mrb_value num)
|
|
|
638
649
|
mrb_float f = ceil(mrb_float(num));
|
|
639
650
|
|
|
640
651
|
mrb_check_num_exact(mrb, f);
|
|
641
|
-
|
|
642
|
-
return mrb_float_value(mrb, f);
|
|
643
|
-
}
|
|
644
|
-
return mrb_fixnum_value((mrb_int)f);
|
|
652
|
+
return mrb_int_value(mrb, f);
|
|
645
653
|
}
|
|
646
654
|
|
|
647
655
|
/* 15.2.9.3.12 */
|
|
@@ -692,6 +700,7 @@ flo_round(mrb_state *mrb, mrb_value num)
|
|
|
692
700
|
|
|
693
701
|
f = 1.0;
|
|
694
702
|
i = ndigits >= 0 ? ndigits : -ndigits;
|
|
703
|
+
if (ndigits > DBL_DIG+2) return num;
|
|
695
704
|
while (--i >= 0)
|
|
696
705
|
f = f*10.0;
|
|
697
706
|
|
|
@@ -722,7 +731,7 @@ flo_round(mrb_state *mrb, mrb_value num)
|
|
|
722
731
|
if (!isfinite(number)) return num;
|
|
723
732
|
return mrb_float_value(mrb, number);
|
|
724
733
|
}
|
|
725
|
-
return
|
|
734
|
+
return mrb_int_value(mrb, number);
|
|
726
735
|
}
|
|
727
736
|
|
|
728
737
|
/* 15.2.9.3.14 */
|
|
@@ -744,10 +753,7 @@ flo_truncate(mrb_state *mrb, mrb_value num)
|
|
|
744
753
|
if (f < 0.0) f = ceil(f);
|
|
745
754
|
|
|
746
755
|
mrb_check_num_exact(mrb, f);
|
|
747
|
-
|
|
748
|
-
return mrb_float_value(mrb, f);
|
|
749
|
-
}
|
|
750
|
-
return mrb_fixnum_value((mrb_int)f);
|
|
756
|
+
return mrb_int_value(mrb, f);
|
|
751
757
|
}
|
|
752
758
|
|
|
753
759
|
static mrb_value
|
|
@@ -780,8 +786,8 @@ int_to_i(mrb_state *mrb, mrb_value num)
|
|
|
780
786
|
return num;
|
|
781
787
|
}
|
|
782
788
|
|
|
783
|
-
mrb_value
|
|
784
|
-
|
|
789
|
+
static mrb_value
|
|
790
|
+
fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
785
791
|
{
|
|
786
792
|
mrb_int a;
|
|
787
793
|
|
|
@@ -805,6 +811,21 @@ mrb_fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
805
811
|
#endif
|
|
806
812
|
}
|
|
807
813
|
|
|
814
|
+
MRB_API mrb_value
|
|
815
|
+
mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
816
|
+
{
|
|
817
|
+
if (mrb_fixnum_p(x)) {
|
|
818
|
+
return fixnum_mul(mrb, x, y);
|
|
819
|
+
}
|
|
820
|
+
#ifndef MRB_WITHOUT_FLOAT
|
|
821
|
+
if (mrb_float_p(x)) {
|
|
822
|
+
return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y));
|
|
823
|
+
}
|
|
824
|
+
#endif
|
|
825
|
+
mrb_raise(mrb, E_TYPE_ERROR, "no number multiply");
|
|
826
|
+
return mrb_nil_value(); /* not reached */
|
|
827
|
+
}
|
|
828
|
+
|
|
808
829
|
/* 15.2.8.3.3 */
|
|
809
830
|
/*
|
|
810
831
|
* call-seq:
|
|
@@ -821,7 +842,7 @@ fix_mul(mrb_state *mrb, mrb_value x)
|
|
|
821
842
|
mrb_value y;
|
|
822
843
|
|
|
823
844
|
mrb_get_args(mrb, "o", &y);
|
|
824
|
-
return
|
|
845
|
+
return fixnum_mul(mrb, x, y);
|
|
825
846
|
}
|
|
826
847
|
|
|
827
848
|
static void
|
|
@@ -866,22 +887,24 @@ static mrb_value
|
|
|
866
887
|
fix_mod(mrb_state *mrb, mrb_value x)
|
|
867
888
|
{
|
|
868
889
|
mrb_value y;
|
|
869
|
-
mrb_int a;
|
|
890
|
+
mrb_int a, b;
|
|
870
891
|
|
|
871
892
|
mrb_get_args(mrb, "o", &y);
|
|
872
893
|
a = mrb_fixnum(x);
|
|
873
|
-
|
|
874
|
-
mrb_int
|
|
894
|
+
if (mrb_fixnum_p(y) && a != MRB_INT_MIN && (b=mrb_fixnum(y)) != MRB_INT_MIN) {
|
|
895
|
+
mrb_int mod;
|
|
875
896
|
|
|
876
|
-
if (
|
|
897
|
+
if (b == 0) {
|
|
877
898
|
#ifdef MRB_WITHOUT_FLOAT
|
|
878
899
|
/* ZeroDivisionError */
|
|
879
900
|
return mrb_fixnum_value(0);
|
|
880
901
|
#else
|
|
902
|
+
if (a > 0) return mrb_float_value(mrb, INFINITY);
|
|
903
|
+
if (a < 0) return mrb_float_value(mrb, INFINITY);
|
|
881
904
|
return mrb_float_value(mrb, NAN);
|
|
882
905
|
#endif
|
|
883
906
|
}
|
|
884
|
-
fixdivmod(mrb, a, b,
|
|
907
|
+
fixdivmod(mrb, a, b, NULL, &mod);
|
|
885
908
|
return mrb_fixnum_value(mod);
|
|
886
909
|
}
|
|
887
910
|
#ifdef MRB_WITHOUT_FLOAT
|
|
@@ -890,7 +913,7 @@ fix_mod(mrb_state *mrb, mrb_value x)
|
|
|
890
913
|
else {
|
|
891
914
|
mrb_float mod;
|
|
892
915
|
|
|
893
|
-
flodivmod(mrb, (mrb_float)a, mrb_to_flo(mrb, y),
|
|
916
|
+
flodivmod(mrb, (mrb_float)a, mrb_to_flo(mrb, y), NULL, &mod);
|
|
894
917
|
return mrb_float_value(mrb, mod);
|
|
895
918
|
}
|
|
896
919
|
#endif
|
|
@@ -933,7 +956,7 @@ fix_divmod(mrb_state *mrb, mrb_value x)
|
|
|
933
956
|
mrb_value a, b;
|
|
934
957
|
|
|
935
958
|
flodivmod(mrb, (mrb_float)mrb_fixnum(x), mrb_to_flo(mrb, y), &div, &mod);
|
|
936
|
-
a =
|
|
959
|
+
a = mrb_int_value(mrb, div);
|
|
937
960
|
b = mrb_float_value(mrb, mod);
|
|
938
961
|
return mrb_assoc_new(mrb, a, b);
|
|
939
962
|
}
|
|
@@ -951,7 +974,7 @@ flo_divmod(mrb_state *mrb, mrb_value x)
|
|
|
951
974
|
mrb_get_args(mrb, "o", &y);
|
|
952
975
|
|
|
953
976
|
flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), &div, &mod);
|
|
954
|
-
a =
|
|
977
|
+
a = mrb_int_value(mrb, div);
|
|
955
978
|
b = mrb_float_value(mrb, mod);
|
|
956
979
|
return mrb_assoc_new(mrb, a, b);
|
|
957
980
|
}
|
|
@@ -1096,7 +1119,7 @@ lshift(mrb_state *mrb, mrb_int val, mrb_int width)
|
|
|
1096
1119
|
}
|
|
1097
1120
|
else {
|
|
1098
1121
|
if ((width > NUMERIC_SHIFT_WIDTH_MAX) ||
|
|
1099
|
-
(val
|
|
1122
|
+
(val <= (MRB_INT_MIN >> width))) {
|
|
1100
1123
|
#ifdef MRB_WITHOUT_FLOAT
|
|
1101
1124
|
return mrb_fixnum_value(0);
|
|
1102
1125
|
#else
|
|
@@ -1230,15 +1253,15 @@ mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x)
|
|
|
1230
1253
|
z = (mrb_int)d;
|
|
1231
1254
|
}
|
|
1232
1255
|
else {
|
|
1233
|
-
mrb_raisef(mrb,
|
|
1256
|
+
mrb_raisef(mrb, E_RANGE_ERROR, "number (%v) too big for integer", x);
|
|
1234
1257
|
}
|
|
1235
1258
|
}
|
|
1236
1259
|
return mrb_fixnum_value(z);
|
|
1237
1260
|
}
|
|
1238
1261
|
#endif
|
|
1239
1262
|
|
|
1240
|
-
mrb_value
|
|
1241
|
-
|
|
1263
|
+
static mrb_value
|
|
1264
|
+
fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
1242
1265
|
{
|
|
1243
1266
|
mrb_int a;
|
|
1244
1267
|
|
|
@@ -1262,6 +1285,21 @@ mrb_fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1262
1285
|
#endif
|
|
1263
1286
|
}
|
|
1264
1287
|
|
|
1288
|
+
MRB_API mrb_value
|
|
1289
|
+
mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
1290
|
+
{
|
|
1291
|
+
if (mrb_fixnum_p(x)) {
|
|
1292
|
+
return fixnum_plus(mrb, x, y);
|
|
1293
|
+
}
|
|
1294
|
+
#ifndef MRB_WITHOUT_FLOAT
|
|
1295
|
+
if (mrb_float_p(x)) {
|
|
1296
|
+
return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y));
|
|
1297
|
+
}
|
|
1298
|
+
#endif
|
|
1299
|
+
mrb_raise(mrb, E_TYPE_ERROR, "no number addition");
|
|
1300
|
+
return mrb_nil_value(); /* not reached */
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1265
1303
|
/* 15.2.8.3.1 */
|
|
1266
1304
|
/*
|
|
1267
1305
|
* call-seq:
|
|
@@ -1277,11 +1315,11 @@ fix_plus(mrb_state *mrb, mrb_value self)
|
|
|
1277
1315
|
mrb_value other;
|
|
1278
1316
|
|
|
1279
1317
|
mrb_get_args(mrb, "o", &other);
|
|
1280
|
-
return
|
|
1318
|
+
return fixnum_plus(mrb, self, other);
|
|
1281
1319
|
}
|
|
1282
1320
|
|
|
1283
|
-
mrb_value
|
|
1284
|
-
|
|
1321
|
+
static mrb_value
|
|
1322
|
+
fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
1285
1323
|
{
|
|
1286
1324
|
mrb_int a;
|
|
1287
1325
|
|
|
@@ -1304,6 +1342,21 @@ mrb_fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
|
1304
1342
|
#endif
|
|
1305
1343
|
}
|
|
1306
1344
|
|
|
1345
|
+
MRB_API mrb_value
|
|
1346
|
+
mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y)
|
|
1347
|
+
{
|
|
1348
|
+
if (mrb_fixnum_p(x)) {
|
|
1349
|
+
return fixnum_minus(mrb, x, y);
|
|
1350
|
+
}
|
|
1351
|
+
#ifndef MRB_WITHOUT_FLOAT
|
|
1352
|
+
if (mrb_float_p(x)) {
|
|
1353
|
+
return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y));
|
|
1354
|
+
}
|
|
1355
|
+
#endif
|
|
1356
|
+
mrb_raise(mrb, E_TYPE_ERROR, "no number subtraction");
|
|
1357
|
+
return mrb_nil_value(); /* not reached */
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1307
1360
|
/* 15.2.8.3.2 */
|
|
1308
1361
|
/* 15.2.8.3.16 */
|
|
1309
1362
|
/*
|
|
@@ -1320,7 +1373,7 @@ fix_minus(mrb_state *mrb, mrb_value self)
|
|
|
1320
1373
|
mrb_value other;
|
|
1321
1374
|
|
|
1322
1375
|
mrb_get_args(mrb, "o", &other);
|
|
1323
|
-
return
|
|
1376
|
+
return fixnum_minus(mrb, self, other);
|
|
1324
1377
|
}
|
|
1325
1378
|
|
|
1326
1379
|
|
|
@@ -1332,7 +1385,7 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base)
|
|
|
1332
1385
|
mrb_int val = mrb_fixnum(x);
|
|
1333
1386
|
|
|
1334
1387
|
if (base < 2 || 36 < base) {
|
|
1335
|
-
mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %
|
|
1388
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %i", base);
|
|
1336
1389
|
}
|
|
1337
1390
|
|
|
1338
1391
|
if (val == 0) {
|
|
@@ -1430,7 +1483,7 @@ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2)
|
|
|
1430
1483
|
* basis for the tests in <code>Comparable</code>.
|
|
1431
1484
|
*/
|
|
1432
1485
|
static mrb_value
|
|
1433
|
-
|
|
1486
|
+
integral_cmp(mrb_state *mrb, mrb_value self)
|
|
1434
1487
|
{
|
|
1435
1488
|
mrb_value other;
|
|
1436
1489
|
mrb_int n;
|
|
@@ -1441,16 +1494,14 @@ num_cmp(mrb_state *mrb, mrb_value self)
|
|
|
1441
1494
|
return mrb_fixnum_value(n);
|
|
1442
1495
|
}
|
|
1443
1496
|
|
|
1444
|
-
static void
|
|
1497
|
+
static mrb_noreturn void
|
|
1445
1498
|
cmperr(mrb_state *mrb, mrb_value v1, mrb_value v2)
|
|
1446
1499
|
{
|
|
1447
|
-
mrb_raisef(mrb, E_ARGUMENT_ERROR, "comparison of %
|
|
1448
|
-
mrb_obj_value(mrb_class(mrb, v1)),
|
|
1449
|
-
mrb_obj_value(mrb_class(mrb, v2)));
|
|
1500
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, "comparison of %t with %t failed", v1, v2);
|
|
1450
1501
|
}
|
|
1451
1502
|
|
|
1452
1503
|
static mrb_value
|
|
1453
|
-
|
|
1504
|
+
integral_lt(mrb_state *mrb, mrb_value self)
|
|
1454
1505
|
{
|
|
1455
1506
|
mrb_value other;
|
|
1456
1507
|
mrb_int n;
|
|
@@ -1463,7 +1514,7 @@ num_lt(mrb_state *mrb, mrb_value self)
|
|
|
1463
1514
|
}
|
|
1464
1515
|
|
|
1465
1516
|
static mrb_value
|
|
1466
|
-
|
|
1517
|
+
integral_le(mrb_state *mrb, mrb_value self)
|
|
1467
1518
|
{
|
|
1468
1519
|
mrb_value other;
|
|
1469
1520
|
mrb_int n;
|
|
@@ -1476,7 +1527,7 @@ num_le(mrb_state *mrb, mrb_value self)
|
|
|
1476
1527
|
}
|
|
1477
1528
|
|
|
1478
1529
|
static mrb_value
|
|
1479
|
-
|
|
1530
|
+
integral_gt(mrb_state *mrb, mrb_value self)
|
|
1480
1531
|
{
|
|
1481
1532
|
mrb_value other;
|
|
1482
1533
|
mrb_int n;
|
|
@@ -1489,7 +1540,7 @@ num_gt(mrb_state *mrb, mrb_value self)
|
|
|
1489
1540
|
}
|
|
1490
1541
|
|
|
1491
1542
|
static mrb_value
|
|
1492
|
-
|
|
1543
|
+
integral_ge(mrb_state *mrb, mrb_value self)
|
|
1493
1544
|
{
|
|
1494
1545
|
mrb_value other;
|
|
1495
1546
|
mrb_int n;
|
|
@@ -1501,17 +1552,36 @@ num_ge(mrb_state *mrb, mrb_value self)
|
|
|
1501
1552
|
return mrb_false_value();
|
|
1502
1553
|
}
|
|
1503
1554
|
|
|
1555
|
+
MRB_API mrb_int
|
|
1556
|
+
mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
|
|
1557
|
+
{
|
|
1558
|
+
mrb_value v;
|
|
1559
|
+
|
|
1560
|
+
switch (mrb_type(obj1)) {
|
|
1561
|
+
case MRB_TT_FIXNUM:
|
|
1562
|
+
case MRB_TT_FLOAT:
|
|
1563
|
+
return cmpnum(mrb, obj1, obj2);
|
|
1564
|
+
case MRB_TT_STRING:
|
|
1565
|
+
if (!mrb_string_p(obj2))
|
|
1566
|
+
return -2;
|
|
1567
|
+
return mrb_str_cmp(mrb, obj1, obj2);
|
|
1568
|
+
default:
|
|
1569
|
+
v = mrb_funcall(mrb, obj1, "<=>", 1, obj2);
|
|
1570
|
+
if (mrb_nil_p(v) || !mrb_fixnum_p(v))
|
|
1571
|
+
return -2;
|
|
1572
|
+
return mrb_fixnum(v);
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1575
|
+
|
|
1504
1576
|
static mrb_value
|
|
1505
1577
|
num_finite_p(mrb_state *mrb, mrb_value self)
|
|
1506
1578
|
{
|
|
1507
|
-
mrb_get_args(mrb, "");
|
|
1508
1579
|
return mrb_true_value();
|
|
1509
1580
|
}
|
|
1510
1581
|
|
|
1511
1582
|
static mrb_value
|
|
1512
1583
|
num_infinite_p(mrb_state *mrb, mrb_value self)
|
|
1513
1584
|
{
|
|
1514
|
-
mrb_get_args(mrb, "");
|
|
1515
1585
|
return mrb_false_value();
|
|
1516
1586
|
}
|
|
1517
1587
|
|
|
@@ -1544,21 +1614,21 @@ mrb_init_numeric(mrb_state *mrb)
|
|
|
1544
1614
|
#endif
|
|
1545
1615
|
|
|
1546
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));
|
|
1547
1627
|
|
|
1548
1628
|
/* Numeric Class */
|
|
1549
1629
|
numeric = mrb_define_class(mrb, "Numeric", mrb->object_class); /* 15.2.7 */
|
|
1550
|
-
|
|
1551
|
-
mrb_define_method(mrb, numeric, "**", num_pow, MRB_ARGS_REQ(1));
|
|
1552
|
-
mrb_define_method(mrb, numeric, "/", num_div, MRB_ARGS_REQ(1)); /* 15.2.8.3.4 */
|
|
1553
|
-
mrb_define_method(mrb, numeric, "quo", num_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */
|
|
1554
|
-
mrb_define_method(mrb, numeric, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.9.3.6 */
|
|
1555
|
-
mrb_define_method(mrb, numeric, "<", num_lt, MRB_ARGS_REQ(1));
|
|
1556
|
-
mrb_define_method(mrb, numeric, "<=", num_le, MRB_ARGS_REQ(1));
|
|
1557
|
-
mrb_define_method(mrb, numeric, ">", num_gt, MRB_ARGS_REQ(1));
|
|
1558
|
-
mrb_define_method(mrb, numeric, ">=", num_ge, MRB_ARGS_REQ(1));
|
|
1559
1630
|
mrb_define_method(mrb, numeric, "finite?", num_finite_p, MRB_ARGS_NONE());
|
|
1560
1631
|
mrb_define_method(mrb, numeric, "infinite?",num_infinite_p, MRB_ARGS_NONE());
|
|
1561
|
-
mrb_define_method(mrb, numeric, "__coerce_step_counter", num_coerce_step_counter, MRB_ARGS_REQ(2));
|
|
1562
1632
|
|
|
1563
1633
|
/* Integer Class */
|
|
1564
1634
|
integer = mrb_define_class(mrb, "Integer", numeric); /* 15.2.8 */
|
|
@@ -1567,10 +1637,10 @@ mrb_init_numeric(mrb_state *mrb)
|
|
|
1567
1637
|
mrb_define_method(mrb, integer, "to_i", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.24 */
|
|
1568
1638
|
mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE());
|
|
1569
1639
|
#ifndef MRB_WITHOUT_FLOAT
|
|
1570
|
-
mrb_define_method(mrb, integer, "ceil", int_to_i,
|
|
1571
|
-
mrb_define_method(mrb, integer, "floor", int_to_i,
|
|
1572
|
-
mrb_define_method(mrb, integer, "round", int_to_i,
|
|
1573
|
-
mrb_define_method(mrb, integer, "truncate", int_to_i,
|
|
1640
|
+
mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.8 (x) */
|
|
1641
|
+
mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.10 (x) */
|
|
1642
|
+
mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.12 (x) */
|
|
1643
|
+
mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.15 (x) */
|
|
1574
1644
|
#endif
|
|
1575
1645
|
|
|
1576
1646
|
/* Fixnum Class */
|
|
@@ -1590,8 +1660,8 @@ mrb_init_numeric(mrb_state *mrb)
|
|
|
1590
1660
|
#ifndef MRB_WITHOUT_FLOAT
|
|
1591
1661
|
mrb_define_method(mrb, fixnum, "to_f", fix_to_f, MRB_ARGS_NONE()); /* 15.2.8.3.23 */
|
|
1592
1662
|
#endif
|
|
1593
|
-
mrb_define_method(mrb, fixnum, "to_s", fix_to_s,
|
|
1594
|
-
mrb_define_method(mrb, fixnum, "inspect", fix_to_s,
|
|
1663
|
+
mrb_define_method(mrb, fixnum, "to_s", fix_to_s, MRB_ARGS_OPT(1)); /* 15.2.8.3.25 */
|
|
1664
|
+
mrb_define_method(mrb, fixnum, "inspect", fix_to_s, MRB_ARGS_OPT(1));
|
|
1595
1665
|
mrb_define_method(mrb, fixnum, "divmod", fix_divmod, MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */
|
|
1596
1666
|
|
|
1597
1667
|
#ifndef MRB_WITHOUT_FLOAT
|
|
@@ -1608,8 +1678,8 @@ mrb_init_numeric(mrb_state *mrb)
|
|
|
1608
1678
|
mrb_define_method(mrb, fl, "&", flo_and, MRB_ARGS_REQ(1));
|
|
1609
1679
|
mrb_define_method(mrb, fl, "|", flo_or, MRB_ARGS_REQ(1));
|
|
1610
1680
|
mrb_define_method(mrb, fl, "^", flo_xor, MRB_ARGS_REQ(1));
|
|
1611
|
-
mrb_define_method(mrb, fl, ">>",
|
|
1612
|
-
mrb_define_method(mrb, fl, "<<",
|
|
1681
|
+
mrb_define_method(mrb, fl, ">>", flo_rshift, MRB_ARGS_REQ(1));
|
|
1682
|
+
mrb_define_method(mrb, fl, "<<", flo_lshift, MRB_ARGS_REQ(1));
|
|
1613
1683
|
mrb_define_method(mrb, fl, "ceil", flo_ceil, MRB_ARGS_NONE()); /* 15.2.9.3.8 */
|
|
1614
1684
|
mrb_define_method(mrb, fl, "finite?", flo_finite_p, MRB_ARGS_NONE()); /* 15.2.9.3.9 */
|
|
1615
1685
|
mrb_define_method(mrb, fl, "floor", flo_floor, MRB_ARGS_NONE()); /* 15.2.9.3.10 */
|