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
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#include <mruby/data.h>
|
|
17
17
|
|
|
18
18
|
struct backtrace_location {
|
|
19
|
-
|
|
19
|
+
int32_t lineno;
|
|
20
20
|
mrb_sym method_id;
|
|
21
21
|
const char *filename;
|
|
22
22
|
};
|
|
@@ -26,7 +26,7 @@ typedef void (*each_backtrace_func)(mrb_state*, const struct backtrace_location*
|
|
|
26
26
|
static const mrb_data_type bt_type = { "Backtrace", mrb_free };
|
|
27
27
|
|
|
28
28
|
static void
|
|
29
|
-
each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, mrb_code *pc0, each_backtrace_func func, void *data)
|
|
29
|
+
each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, const mrb_code *pc0, each_backtrace_func func, void *data)
|
|
30
30
|
{
|
|
31
31
|
ptrdiff_t i;
|
|
32
32
|
|
|
@@ -37,7 +37,7 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, mrb_code *pc0, each_backtrace_fu
|
|
|
37
37
|
struct backtrace_location loc;
|
|
38
38
|
mrb_callinfo *ci;
|
|
39
39
|
mrb_irep *irep;
|
|
40
|
-
mrb_code *pc;
|
|
40
|
+
const mrb_code *pc;
|
|
41
41
|
|
|
42
42
|
ci = &mrb->c->cibase[i];
|
|
43
43
|
|
|
@@ -128,7 +128,7 @@ print_packed_backtrace(mrb_state *mrb, mrb_value packed)
|
|
|
128
128
|
if (entry->method_id != 0) {
|
|
129
129
|
const char *method_name;
|
|
130
130
|
|
|
131
|
-
method_name =
|
|
131
|
+
method_name = mrb_sym_name(mrb, entry->method_id);
|
|
132
132
|
fprintf(stream, ":in %s", method_name);
|
|
133
133
|
mrb_gc_arena_restore(mrb, ai);
|
|
134
134
|
}
|
|
@@ -246,12 +246,10 @@ mrb_unpack_backtrace(mrb_state *mrb, mrb_value backtrace)
|
|
|
246
246
|
mrb_value btline;
|
|
247
247
|
|
|
248
248
|
if (entry->filename == NULL) continue;
|
|
249
|
-
btline = mrb_format(mrb, "%
|
|
250
|
-
mrb_str_new_cstr(mrb, entry->filename),
|
|
251
|
-
mrb_fixnum_value(entry->lineno));
|
|
249
|
+
btline = mrb_format(mrb, "%s:%d", entry->filename, entry->lineno);
|
|
252
250
|
if (entry->method_id != 0) {
|
|
253
251
|
mrb_str_cat_lit(mrb, btline, ":in ");
|
|
254
|
-
mrb_str_cat_cstr(mrb, btline,
|
|
252
|
+
mrb_str_cat_cstr(mrb, btline, mrb_sym_name(mrb, entry->method_id));
|
|
255
253
|
}
|
|
256
254
|
mrb_ary_push(mrb, backtrace, btline);
|
|
257
255
|
mrb_gc_arena_restore(mrb, ai);
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
#include <stdarg.h>
|
|
8
8
|
#include <mruby.h>
|
|
9
9
|
#include <mruby/array.h>
|
|
10
|
+
#include <mruby/hash.h>
|
|
10
11
|
#include <mruby/class.h>
|
|
11
12
|
#include <mruby/numeric.h>
|
|
12
13
|
#include <mruby/proc.h>
|
|
@@ -15,6 +16,7 @@
|
|
|
15
16
|
#include <mruby/error.h>
|
|
16
17
|
#include <mruby/data.h>
|
|
17
18
|
#include <mruby/istruct.h>
|
|
19
|
+
#include <mruby/opcode.h>
|
|
18
20
|
|
|
19
21
|
KHASH_DEFINE(mt, mrb_sym, mrb_method_t, TRUE, kh_int_hash_func, kh_int_hash_equal)
|
|
20
22
|
|
|
@@ -66,15 +68,26 @@ mrb_class_name_class(mrb_state *mrb, struct RClass *outer, struct RClass *c, mrb
|
|
|
66
68
|
name = mrb_class_path(mrb, outer);
|
|
67
69
|
if (mrb_nil_p(name)) { /* unnamed outer class */
|
|
68
70
|
if (outer != mrb->object_class && outer != c) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
+
mrb_obj_iv_set_force(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__"),
|
|
72
|
+
mrb_obj_value(outer));
|
|
71
73
|
}
|
|
72
74
|
return;
|
|
73
75
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
else {
|
|
77
|
+
mrb_int len;
|
|
78
|
+
const char *n = mrb_sym_name_len(mrb, id, &len);
|
|
79
|
+
|
|
80
|
+
mrb_str_cat_lit(mrb, name, "::");
|
|
81
|
+
mrb_str_cat(mrb, name, n, len);
|
|
82
|
+
}
|
|
76
83
|
}
|
|
77
|
-
|
|
84
|
+
mrb_obj_iv_set_force(mrb, (struct RObject*)c, nsym, name);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
mrb_bool
|
|
88
|
+
mrb_const_name_p(mrb_state *mrb, const char *name, mrb_int len)
|
|
89
|
+
{
|
|
90
|
+
return len > 0 && ISUPPER(name[0]) && mrb_ident_p(name+1, len-1);
|
|
78
91
|
}
|
|
79
92
|
|
|
80
93
|
static void
|
|
@@ -120,6 +133,7 @@ prepare_singleton_class(mrb_state *mrb, struct RBasic *o)
|
|
|
120
133
|
mrb_field_write_barrier(mrb, (struct RBasic*)o, (struct RBasic*)sc);
|
|
121
134
|
mrb_field_write_barrier(mrb, (struct RBasic*)sc, (struct RBasic*)o);
|
|
122
135
|
mrb_obj_iv_set(mrb, (struct RObject*)sc, mrb_intern_lit(mrb, "__attached__"), mrb_obj_value(o));
|
|
136
|
+
sc->flags |= o->flags & MRB_FL_OBJ_IS_FROZEN;
|
|
123
137
|
}
|
|
124
138
|
|
|
125
139
|
static mrb_value
|
|
@@ -129,7 +143,7 @@ class_name_str(mrb_state *mrb, struct RClass* c)
|
|
|
129
143
|
if (mrb_nil_p(path)) {
|
|
130
144
|
path = c->tt == MRB_TT_MODULE ? mrb_str_new_lit(mrb, "#<Module:") :
|
|
131
145
|
mrb_str_new_lit(mrb, "#<Class:");
|
|
132
|
-
|
|
146
|
+
mrb_str_cat_str(mrb, path, mrb_ptr_to_str(mrb, c));
|
|
133
147
|
mrb_str_cat_lit(mrb, path, ">");
|
|
134
148
|
}
|
|
135
149
|
return path;
|
|
@@ -170,7 +184,7 @@ static void
|
|
|
170
184
|
check_if_class_or_module(mrb_state *mrb, mrb_value obj)
|
|
171
185
|
{
|
|
172
186
|
if (!class_ptr_p(obj)) {
|
|
173
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "
|
|
187
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a class/module", obj);
|
|
174
188
|
}
|
|
175
189
|
}
|
|
176
190
|
|
|
@@ -200,15 +214,15 @@ mrb_define_module(mrb_state *mrb, const char *name)
|
|
|
200
214
|
return define_module(mrb, mrb_intern_cstr(mrb, name), mrb->object_class);
|
|
201
215
|
}
|
|
202
216
|
|
|
203
|
-
|
|
217
|
+
struct RClass*
|
|
204
218
|
mrb_vm_define_module(mrb_state *mrb, mrb_value outer, mrb_sym id)
|
|
205
219
|
{
|
|
206
220
|
check_if_class_or_module(mrb, outer);
|
|
207
221
|
if (mrb_const_defined_at(mrb, outer, id)) {
|
|
208
222
|
mrb_value old = mrb_const_get(mrb, outer, id);
|
|
209
223
|
|
|
210
|
-
if (
|
|
211
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "
|
|
224
|
+
if (!mrb_module_p(old)) {
|
|
225
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a module", old);
|
|
212
226
|
}
|
|
213
227
|
return mrb_class_ptr(old);
|
|
214
228
|
}
|
|
@@ -241,9 +255,8 @@ define_class(mrb_state *mrb, mrb_sym name, struct RClass *super, struct RClass *
|
|
|
241
255
|
c = class_from_sym(mrb, outer, name);
|
|
242
256
|
MRB_CLASS_ORIGIN(c);
|
|
243
257
|
if (super && mrb_class_real(c->super) != super) {
|
|
244
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "superclass mismatch for Class %
|
|
245
|
-
|
|
246
|
-
mrb_obj_value(c->super), mrb_obj_value(super));
|
|
258
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "superclass mismatch for Class %n (%C not %C)",
|
|
259
|
+
name, c->super, super);
|
|
247
260
|
}
|
|
248
261
|
return c;
|
|
249
262
|
}
|
|
@@ -258,7 +271,7 @@ MRB_API struct RClass*
|
|
|
258
271
|
mrb_define_class_id(mrb_state *mrb, mrb_sym name, struct RClass *super)
|
|
259
272
|
{
|
|
260
273
|
if (!super) {
|
|
261
|
-
mrb_warn(mrb, "no super class for '%
|
|
274
|
+
mrb_warn(mrb, "no super class for '%n', Object assumed", name);
|
|
262
275
|
}
|
|
263
276
|
return define_class(mrb, name, super, mrb->object_class);
|
|
264
277
|
}
|
|
@@ -298,16 +311,15 @@ mrb_class_inherited(mrb_state *mrb, struct RClass *super, struct RClass *klass)
|
|
|
298
311
|
}
|
|
299
312
|
}
|
|
300
313
|
|
|
301
|
-
|
|
314
|
+
struct RClass*
|
|
302
315
|
mrb_vm_define_class(mrb_state *mrb, mrb_value outer, mrb_value super, mrb_sym id)
|
|
303
316
|
{
|
|
304
317
|
struct RClass *s;
|
|
305
318
|
struct RClass *c;
|
|
306
319
|
|
|
307
320
|
if (!mrb_nil_p(super)) {
|
|
308
|
-
if (
|
|
309
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "superclass must be a Class (
|
|
310
|
-
mrb_inspect(mrb, super));
|
|
321
|
+
if (!mrb_class_p(super)) {
|
|
322
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "superclass must be a Class (%!v given)", super);
|
|
311
323
|
}
|
|
312
324
|
s = mrb_class_ptr(super);
|
|
313
325
|
}
|
|
@@ -318,14 +330,14 @@ mrb_vm_define_class(mrb_state *mrb, mrb_value outer, mrb_value super, mrb_sym id
|
|
|
318
330
|
if (mrb_const_defined_at(mrb, outer, id)) {
|
|
319
331
|
mrb_value old = mrb_const_get(mrb, outer, id);
|
|
320
332
|
|
|
321
|
-
if (
|
|
322
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "
|
|
333
|
+
if (!mrb_class_p(old)) {
|
|
334
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a class", old);
|
|
323
335
|
}
|
|
324
336
|
c = mrb_class_ptr(old);
|
|
325
337
|
if (s) {
|
|
326
338
|
/* check super class */
|
|
327
339
|
if (mrb_class_real(c->super) != s) {
|
|
328
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "superclass mismatch for class %
|
|
340
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "superclass mismatch for class %v", old);
|
|
329
341
|
}
|
|
330
342
|
}
|
|
331
343
|
return c;
|
|
@@ -375,7 +387,7 @@ mrb_exc_get(mrb_state *mrb, const char *name)
|
|
|
375
387
|
mrb_value c = mrb_const_get(mrb, mrb_obj_value(mrb->object_class),
|
|
376
388
|
mrb_intern_cstr(mrb, name));
|
|
377
389
|
|
|
378
|
-
if (
|
|
390
|
+
if (!mrb_class_p(c)) {
|
|
379
391
|
mrb_raise(mrb, mrb->eException_class, "exception corrupted");
|
|
380
392
|
}
|
|
381
393
|
exc = e = mrb_class_ptr(c);
|
|
@@ -403,7 +415,7 @@ mrb_module_get(mrb_state *mrb, const char *name)
|
|
|
403
415
|
/*!
|
|
404
416
|
* Defines a class under the namespace of \a outer.
|
|
405
417
|
* \param outer a class which contains the new class.
|
|
406
|
-
* \param
|
|
418
|
+
* \param name name of the new class
|
|
407
419
|
* \param super a class from which the new class will derive.
|
|
408
420
|
* NULL means \c Object class.
|
|
409
421
|
* \return the created class
|
|
@@ -424,8 +436,7 @@ mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, s
|
|
|
424
436
|
|
|
425
437
|
#if 0
|
|
426
438
|
if (!super) {
|
|
427
|
-
mrb_warn(mrb, "no super class for '%
|
|
428
|
-
mrb_obj_value(outer), mrb_sym2str(mrb, id));
|
|
439
|
+
mrb_warn(mrb, "no super class for '%C::%n', Object assumed", outer, id);
|
|
429
440
|
}
|
|
430
441
|
#endif
|
|
431
442
|
c = define_class(mrb, id, super, outer);
|
|
@@ -441,12 +452,7 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_
|
|
|
441
452
|
MRB_CLASS_ORIGIN(c);
|
|
442
453
|
h = c->mt;
|
|
443
454
|
|
|
444
|
-
|
|
445
|
-
if (c->tt == MRB_TT_MODULE)
|
|
446
|
-
mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen module");
|
|
447
|
-
else
|
|
448
|
-
mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen class");
|
|
449
|
-
}
|
|
455
|
+
mrb_check_frozen(mrb, c);
|
|
450
456
|
if (!h) h = c->mt = kh_init(mt, mrb);
|
|
451
457
|
k = kh_put(mt, mrb, h, mid);
|
|
452
458
|
kh_value(h, k) = m;
|
|
@@ -470,6 +476,9 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f
|
|
|
470
476
|
int ai = mrb_gc_arena_save(mrb);
|
|
471
477
|
|
|
472
478
|
MRB_METHOD_FROM_FUNC(m, func);
|
|
479
|
+
if (aspec == MRB_ARGS_NONE()) {
|
|
480
|
+
MRB_METHOD_NOARG_SET(m);
|
|
481
|
+
}
|
|
473
482
|
mrb_define_method_raw(mrb, c, mid, m);
|
|
474
483
|
mrb_gc_arena_restore(mrb, ai);
|
|
475
484
|
}
|
|
@@ -487,8 +496,7 @@ mrb_notimplement(mrb_state *mrb)
|
|
|
487
496
|
mrb_callinfo *ci = mrb->c->ci;
|
|
488
497
|
|
|
489
498
|
if (ci->mid) {
|
|
490
|
-
|
|
491
|
-
mrb_raisef(mrb, E_NOTIMP_ERROR, "%S() function is unimplemented on this machine", str);
|
|
499
|
+
mrb_raisef(mrb, E_NOTIMP_ERROR, "%n() function is unimplemented on this machine", ci->mid);
|
|
492
500
|
}
|
|
493
501
|
}
|
|
494
502
|
|
|
@@ -501,30 +509,17 @@ mrb_notimplement_m(mrb_state *mrb, mrb_value self)
|
|
|
501
509
|
return mrb_nil_value();
|
|
502
510
|
}
|
|
503
511
|
|
|
504
|
-
#define CHECK_TYPE(mrb, val, t, c) do { \
|
|
505
|
-
if (mrb_type(val) != (t)) {\
|
|
506
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "expected %S", mrb_str_new_lit(mrb, c));\
|
|
507
|
-
}\
|
|
508
|
-
} while (0)
|
|
509
|
-
|
|
510
|
-
static mrb_value
|
|
511
|
-
to_str(mrb_state *mrb, mrb_value val)
|
|
512
|
-
{
|
|
513
|
-
CHECK_TYPE(mrb, val, MRB_TT_STRING, "String");
|
|
514
|
-
return val;
|
|
515
|
-
}
|
|
516
|
-
|
|
517
512
|
static mrb_value
|
|
518
513
|
to_ary(mrb_state *mrb, mrb_value val)
|
|
519
514
|
{
|
|
520
|
-
|
|
515
|
+
mrb_check_type(mrb, val, MRB_TT_ARRAY);
|
|
521
516
|
return val;
|
|
522
517
|
}
|
|
523
518
|
|
|
524
519
|
static mrb_value
|
|
525
520
|
to_hash(mrb_state *mrb, mrb_value val)
|
|
526
521
|
{
|
|
527
|
-
|
|
522
|
+
mrb_check_type(mrb, val, MRB_TT_HASH);
|
|
528
523
|
return val;
|
|
529
524
|
}
|
|
530
525
|
|
|
@@ -559,6 +554,8 @@ mrb_get_argv(mrb_state *mrb)
|
|
|
559
554
|
return array_argv;
|
|
560
555
|
}
|
|
561
556
|
|
|
557
|
+
void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self);
|
|
558
|
+
|
|
562
559
|
/*
|
|
563
560
|
retrieve arguments from mrb_state.
|
|
564
561
|
|
|
@@ -571,23 +568,24 @@ mrb_get_argv(mrb_state *mrb)
|
|
|
571
568
|
string mruby type C type note
|
|
572
569
|
----------------------------------------------------------------------------------------------
|
|
573
570
|
o: Object [mrb_value]
|
|
574
|
-
C:
|
|
571
|
+
C: Class/Module [mrb_value]
|
|
575
572
|
S: String [mrb_value] when ! follows, the value may be nil
|
|
576
573
|
A: Array [mrb_value] when ! follows, the value may be nil
|
|
577
574
|
H: Hash [mrb_value] when ! follows, the value may be nil
|
|
578
575
|
s: String [char*,mrb_int] Receive two arguments; s! gives (NULL,0) for nil
|
|
579
576
|
z: String [char*] NUL terminated string; z! gives NULL for nil
|
|
580
577
|
a: Array [mrb_value*,mrb_int] Receive two arguments; a! gives (NULL,0) for nil
|
|
581
|
-
f: Float
|
|
582
|
-
i:
|
|
583
|
-
b:
|
|
584
|
-
n: Symbol
|
|
585
|
-
d:
|
|
586
|
-
I:
|
|
587
|
-
&:
|
|
578
|
+
f: Fixnum/Float [mrb_float]
|
|
579
|
+
i: Fixnum/Float [mrb_int]
|
|
580
|
+
b: boolean [mrb_bool]
|
|
581
|
+
n: String/Symbol [mrb_sym]
|
|
582
|
+
d: data [void*,mrb_data_type const] 2nd argument will be used to check data type so it won't be modified; when ! follows, the value may be nil
|
|
583
|
+
I: inline struct [void*]
|
|
584
|
+
&: block [mrb_value] &! raises exception if no block given
|
|
588
585
|
*: rest argument [mrb_value*,mrb_int] The rest of the arguments as an array; *! avoid copy of the stack
|
|
589
586
|
|: optional Following arguments are optional
|
|
590
587
|
?: optional given [mrb_bool] true if preceding argument (optional) is given
|
|
588
|
+
':': keyword args [mrb_kwargs const] Get keyword arguments
|
|
591
589
|
*/
|
|
592
590
|
MRB_API mrb_int
|
|
593
591
|
mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
@@ -602,6 +600,9 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
602
600
|
mrb_bool opt = FALSE;
|
|
603
601
|
mrb_bool opt_skip = TRUE;
|
|
604
602
|
mrb_bool given = TRUE;
|
|
603
|
+
mrb_value kdict;
|
|
604
|
+
mrb_bool reqkarg = FALSE;
|
|
605
|
+
mrb_int needargc = 0;
|
|
605
606
|
|
|
606
607
|
va_start(ap, format);
|
|
607
608
|
|
|
@@ -615,23 +616,39 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
615
616
|
break;
|
|
616
617
|
case '*':
|
|
617
618
|
opt_skip = FALSE;
|
|
619
|
+
if (!reqkarg) reqkarg = strchr(fmt, ':') ? TRUE : FALSE;
|
|
618
620
|
goto check_exit;
|
|
619
621
|
case '!':
|
|
620
622
|
break;
|
|
621
623
|
case '&': case '?':
|
|
622
624
|
if (opt) opt_skip = FALSE;
|
|
623
625
|
break;
|
|
626
|
+
case ':':
|
|
627
|
+
reqkarg = TRUE;
|
|
628
|
+
break;
|
|
624
629
|
default:
|
|
630
|
+
if (!opt) needargc ++;
|
|
625
631
|
break;
|
|
626
632
|
}
|
|
627
633
|
}
|
|
628
634
|
|
|
629
635
|
check_exit:
|
|
636
|
+
if (reqkarg && argc > needargc && mrb_hash_p(kdict = ARGV[argc - 1])) {
|
|
637
|
+
mrb_hash_check_kdict(mrb, kdict);
|
|
638
|
+
argc --;
|
|
639
|
+
}
|
|
640
|
+
else {
|
|
641
|
+
kdict = mrb_nil_value();
|
|
642
|
+
}
|
|
643
|
+
|
|
630
644
|
opt = FALSE;
|
|
631
645
|
i = 0;
|
|
632
646
|
while ((c = *format++)) {
|
|
647
|
+
mrb_value *argv = ARGV;
|
|
648
|
+
mrb_bool altmode;
|
|
649
|
+
|
|
633
650
|
switch (c) {
|
|
634
|
-
case '|': case '*': case '&': case '?':
|
|
651
|
+
case '|': case '*': case '&': case '?': case ':':
|
|
635
652
|
break;
|
|
636
653
|
default:
|
|
637
654
|
if (argc <= i) {
|
|
@@ -645,6 +662,14 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
645
662
|
break;
|
|
646
663
|
}
|
|
647
664
|
|
|
665
|
+
if (*format == '!') {
|
|
666
|
+
format ++;
|
|
667
|
+
altmode = TRUE;
|
|
668
|
+
}
|
|
669
|
+
else {
|
|
670
|
+
altmode = FALSE;
|
|
671
|
+
}
|
|
672
|
+
|
|
648
673
|
switch (c) {
|
|
649
674
|
case 'o':
|
|
650
675
|
{
|
|
@@ -652,7 +677,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
652
677
|
|
|
653
678
|
p = va_arg(ap, mrb_value*);
|
|
654
679
|
if (i < argc) {
|
|
655
|
-
*p =
|
|
680
|
+
*p = argv[arg_i++];
|
|
656
681
|
i++;
|
|
657
682
|
}
|
|
658
683
|
}
|
|
@@ -665,9 +690,9 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
665
690
|
if (i < argc) {
|
|
666
691
|
mrb_value ss;
|
|
667
692
|
|
|
668
|
-
ss =
|
|
693
|
+
ss = argv[arg_i++];
|
|
669
694
|
if (!class_ptr_p(ss)) {
|
|
670
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "%
|
|
695
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%v is not class/module", ss);
|
|
671
696
|
}
|
|
672
697
|
*p = ss;
|
|
673
698
|
i++;
|
|
@@ -679,17 +704,12 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
679
704
|
mrb_value *p;
|
|
680
705
|
|
|
681
706
|
p = va_arg(ap, mrb_value*);
|
|
682
|
-
if (*format == '!') {
|
|
683
|
-
format++;
|
|
684
|
-
if (i < argc && mrb_nil_p(ARGV[arg_i])) {
|
|
685
|
-
*p = ARGV[arg_i++];
|
|
686
|
-
i++;
|
|
687
|
-
break;
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
707
|
if (i < argc) {
|
|
691
|
-
*p =
|
|
708
|
+
*p = argv[arg_i++];
|
|
692
709
|
i++;
|
|
710
|
+
if (!(altmode && mrb_nil_p(*p))) {
|
|
711
|
+
mrb_to_str(mrb, *p);
|
|
712
|
+
}
|
|
693
713
|
}
|
|
694
714
|
}
|
|
695
715
|
break;
|
|
@@ -698,17 +718,12 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
698
718
|
mrb_value *p;
|
|
699
719
|
|
|
700
720
|
p = va_arg(ap, mrb_value*);
|
|
701
|
-
if (*format == '!') {
|
|
702
|
-
format++;
|
|
703
|
-
if (i < argc && mrb_nil_p(ARGV[arg_i])) {
|
|
704
|
-
*p = ARGV[arg_i++];
|
|
705
|
-
i++;
|
|
706
|
-
break;
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
721
|
if (i < argc) {
|
|
710
|
-
*p =
|
|
722
|
+
*p = argv[arg_i++];
|
|
711
723
|
i++;
|
|
724
|
+
if (!(altmode && mrb_nil_p(*p))) {
|
|
725
|
+
*p = to_ary(mrb, *p);
|
|
726
|
+
}
|
|
712
727
|
}
|
|
713
728
|
}
|
|
714
729
|
break;
|
|
@@ -717,17 +732,12 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
717
732
|
mrb_value *p;
|
|
718
733
|
|
|
719
734
|
p = va_arg(ap, mrb_value*);
|
|
720
|
-
if (*format == '!') {
|
|
721
|
-
format++;
|
|
722
|
-
if (i < argc && mrb_nil_p(ARGV[arg_i])) {
|
|
723
|
-
*p = ARGV[arg_i++];
|
|
724
|
-
i++;
|
|
725
|
-
break;
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
735
|
if (i < argc) {
|
|
729
|
-
*p =
|
|
736
|
+
*p = argv[arg_i++];
|
|
730
737
|
i++;
|
|
738
|
+
if (!(altmode && mrb_nil_p(*p))) {
|
|
739
|
+
*p = to_hash(mrb, *p);
|
|
740
|
+
}
|
|
731
741
|
}
|
|
732
742
|
}
|
|
733
743
|
break;
|
|
@@ -739,20 +749,18 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
739
749
|
|
|
740
750
|
ps = va_arg(ap, char**);
|
|
741
751
|
pl = va_arg(ap, mrb_int*);
|
|
742
|
-
if (
|
|
743
|
-
|
|
744
|
-
|
|
752
|
+
if (i < argc) {
|
|
753
|
+
ss = argv[arg_i++];
|
|
754
|
+
i++;
|
|
755
|
+
if (altmode && mrb_nil_p(ss)) {
|
|
745
756
|
*ps = NULL;
|
|
746
757
|
*pl = 0;
|
|
747
|
-
i++; arg_i++;
|
|
748
|
-
break;
|
|
749
758
|
}
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
i++;
|
|
759
|
+
else {
|
|
760
|
+
mrb_to_str(mrb, ss);
|
|
761
|
+
*ps = RSTRING_PTR(ss);
|
|
762
|
+
*pl = RSTRING_LEN(ss);
|
|
763
|
+
}
|
|
756
764
|
}
|
|
757
765
|
}
|
|
758
766
|
break;
|
|
@@ -762,18 +770,16 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
762
770
|
const char **ps;
|
|
763
771
|
|
|
764
772
|
ps = va_arg(ap, const char**);
|
|
765
|
-
if (*format == '!') {
|
|
766
|
-
format++;
|
|
767
|
-
if (i < argc && mrb_nil_p(ARGV[arg_i])) {
|
|
768
|
-
*ps = NULL;
|
|
769
|
-
i++; arg_i++;
|
|
770
|
-
break;
|
|
771
|
-
}
|
|
772
|
-
}
|
|
773
773
|
if (i < argc) {
|
|
774
|
-
ss =
|
|
775
|
-
*ps = mrb_string_value_cstr(mrb, &ss);
|
|
774
|
+
ss = argv[arg_i++];
|
|
776
775
|
i++;
|
|
776
|
+
if (altmode && mrb_nil_p(ss)) {
|
|
777
|
+
*ps = NULL;
|
|
778
|
+
}
|
|
779
|
+
else {
|
|
780
|
+
mrb_to_str(mrb, ss);
|
|
781
|
+
*ps = RSTRING_CSTR(mrb, ss);
|
|
782
|
+
}
|
|
777
783
|
}
|
|
778
784
|
}
|
|
779
785
|
break;
|
|
@@ -786,21 +792,19 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
786
792
|
|
|
787
793
|
pb = va_arg(ap, mrb_value**);
|
|
788
794
|
pl = va_arg(ap, mrb_int*);
|
|
789
|
-
if (
|
|
790
|
-
|
|
791
|
-
|
|
795
|
+
if (i < argc) {
|
|
796
|
+
aa = argv[arg_i++];
|
|
797
|
+
i++;
|
|
798
|
+
if (altmode && mrb_nil_p(aa)) {
|
|
792
799
|
*pb = 0;
|
|
793
800
|
*pl = 0;
|
|
794
|
-
i++; arg_i++;
|
|
795
|
-
break;
|
|
796
801
|
}
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
i++;
|
|
802
|
+
else {
|
|
803
|
+
aa = to_ary(mrb, aa);
|
|
804
|
+
a = mrb_ary_ptr(aa);
|
|
805
|
+
*pb = ARY_PTR(a);
|
|
806
|
+
*pl = ARY_LEN(a);
|
|
807
|
+
}
|
|
804
808
|
}
|
|
805
809
|
}
|
|
806
810
|
break;
|
|
@@ -811,10 +815,10 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
811
815
|
|
|
812
816
|
p = va_arg(ap, void**);
|
|
813
817
|
if (i < argc) {
|
|
814
|
-
ss =
|
|
815
|
-
if (
|
|
818
|
+
ss = argv[arg_i];
|
|
819
|
+
if (!mrb_istruct_p(ss))
|
|
816
820
|
{
|
|
817
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "%
|
|
821
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%v is not inline struct", ss);
|
|
818
822
|
}
|
|
819
823
|
*p = mrb_istruct_ptr(ss);
|
|
820
824
|
arg_i++;
|
|
@@ -829,7 +833,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
829
833
|
|
|
830
834
|
p = va_arg(ap, mrb_float*);
|
|
831
835
|
if (i < argc) {
|
|
832
|
-
*p = mrb_to_flo(mrb,
|
|
836
|
+
*p = mrb_to_flo(mrb, argv[arg_i]);
|
|
833
837
|
arg_i++;
|
|
834
838
|
i++;
|
|
835
839
|
}
|
|
@@ -842,29 +846,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
842
846
|
|
|
843
847
|
p = va_arg(ap, mrb_int*);
|
|
844
848
|
if (i < argc) {
|
|
845
|
-
|
|
846
|
-
case MRB_TT_FIXNUM:
|
|
847
|
-
*p = mrb_fixnum(ARGV[arg_i]);
|
|
848
|
-
break;
|
|
849
|
-
#ifndef MRB_WITHOUT_FLOAT
|
|
850
|
-
case MRB_TT_FLOAT:
|
|
851
|
-
{
|
|
852
|
-
mrb_float f = mrb_float(ARGV[arg_i]);
|
|
853
|
-
|
|
854
|
-
if (!FIXABLE_FLOAT(f)) {
|
|
855
|
-
mrb_raise(mrb, E_RANGE_ERROR, "float too big for int");
|
|
856
|
-
}
|
|
857
|
-
*p = (mrb_int)f;
|
|
858
|
-
}
|
|
859
|
-
break;
|
|
860
|
-
#endif
|
|
861
|
-
case MRB_TT_STRING:
|
|
862
|
-
mrb_raise(mrb, E_TYPE_ERROR, "no implicit conversion of String into Integer");
|
|
863
|
-
break;
|
|
864
|
-
default:
|
|
865
|
-
*p = mrb_fixnum(mrb_Integer(mrb, ARGV[arg_i]));
|
|
866
|
-
break;
|
|
867
|
-
}
|
|
849
|
+
*p = mrb_fixnum(mrb_to_int(mrb, argv[arg_i]));
|
|
868
850
|
arg_i++;
|
|
869
851
|
i++;
|
|
870
852
|
}
|
|
@@ -875,7 +857,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
875
857
|
mrb_bool *boolp = va_arg(ap, mrb_bool*);
|
|
876
858
|
|
|
877
859
|
if (i < argc) {
|
|
878
|
-
mrb_value b =
|
|
860
|
+
mrb_value b = argv[arg_i++];
|
|
879
861
|
*boolp = mrb_test(b);
|
|
880
862
|
i++;
|
|
881
863
|
}
|
|
@@ -889,7 +871,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
889
871
|
if (i < argc) {
|
|
890
872
|
mrb_value ss;
|
|
891
873
|
|
|
892
|
-
ss =
|
|
874
|
+
ss = argv[arg_i++];
|
|
893
875
|
*symp = to_sym(mrb, ss);
|
|
894
876
|
i++;
|
|
895
877
|
}
|
|
@@ -902,17 +884,15 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
902
884
|
|
|
903
885
|
datap = va_arg(ap, void**);
|
|
904
886
|
type = va_arg(ap, struct mrb_data_type const*);
|
|
905
|
-
if (
|
|
906
|
-
|
|
907
|
-
|
|
887
|
+
if (i < argc) {
|
|
888
|
+
mrb_value dd = argv[arg_i++];
|
|
889
|
+
i++;
|
|
890
|
+
if (altmode && mrb_nil_p(dd)) {
|
|
908
891
|
*datap = 0;
|
|
909
|
-
i++; arg_i++;
|
|
910
|
-
break;
|
|
911
892
|
}
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
++i;
|
|
893
|
+
else {
|
|
894
|
+
*datap = mrb_data_get_ptr(mrb, dd, type);
|
|
895
|
+
}
|
|
916
896
|
}
|
|
917
897
|
}
|
|
918
898
|
break;
|
|
@@ -928,11 +908,8 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
928
908
|
else {
|
|
929
909
|
bp = mrb->c->stack + mrb->c->ci->argc + 1;
|
|
930
910
|
}
|
|
931
|
-
if (
|
|
932
|
-
|
|
933
|
-
if (mrb_nil_p(*bp)) {
|
|
934
|
-
mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
|
|
935
|
-
}
|
|
911
|
+
if (altmode && mrb_nil_p(*bp)) {
|
|
912
|
+
mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
|
|
936
913
|
}
|
|
937
914
|
*p = *bp;
|
|
938
915
|
}
|
|
@@ -954,22 +931,18 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
954
931
|
{
|
|
955
932
|
mrb_value **var;
|
|
956
933
|
mrb_int *pl;
|
|
957
|
-
mrb_bool nocopy = array_argv ? TRUE : FALSE;
|
|
934
|
+
mrb_bool nocopy = altmode || array_argv ? TRUE : FALSE;
|
|
958
935
|
|
|
959
|
-
if (*format == '!') {
|
|
960
|
-
format++;
|
|
961
|
-
nocopy = TRUE;
|
|
962
|
-
}
|
|
963
936
|
var = va_arg(ap, mrb_value**);
|
|
964
937
|
pl = va_arg(ap, mrb_int*);
|
|
965
938
|
if (argc > i) {
|
|
966
939
|
*pl = argc-i;
|
|
967
940
|
if (*pl > 0) {
|
|
968
941
|
if (nocopy) {
|
|
969
|
-
*var =
|
|
942
|
+
*var = argv+arg_i;
|
|
970
943
|
}
|
|
971
944
|
else {
|
|
972
|
-
mrb_value args = mrb_ary_new_from_values(mrb, *pl,
|
|
945
|
+
mrb_value args = mrb_ary_new_from_values(mrb, *pl, argv+arg_i);
|
|
973
946
|
RARRAY(args)->c = NULL;
|
|
974
947
|
*var = RARRAY_PTR(args);
|
|
975
948
|
}
|
|
@@ -983,8 +956,64 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|
|
983
956
|
}
|
|
984
957
|
}
|
|
985
958
|
break;
|
|
959
|
+
|
|
960
|
+
case ':':
|
|
961
|
+
{
|
|
962
|
+
mrb_value ksrc = mrb_hash_p(kdict) ? mrb_hash_dup(mrb, kdict) : mrb_hash_new(mrb);
|
|
963
|
+
const mrb_kwargs *kwargs = va_arg(ap, const mrb_kwargs*);
|
|
964
|
+
mrb_value *rest;
|
|
965
|
+
|
|
966
|
+
if (kwargs == NULL) {
|
|
967
|
+
rest = NULL;
|
|
968
|
+
}
|
|
969
|
+
else {
|
|
970
|
+
uint32_t kwnum = kwargs->num;
|
|
971
|
+
uint32_t required = kwargs->required;
|
|
972
|
+
const char *const *kname = kwargs->table;
|
|
973
|
+
mrb_value *values = kwargs->values;
|
|
974
|
+
uint32_t j;
|
|
975
|
+
const uint32_t keyword_max = 40;
|
|
976
|
+
|
|
977
|
+
if (kwnum > keyword_max || required > kwnum) {
|
|
978
|
+
mrb_raise(mrb, E_ARGUMENT_ERROR, "keyword number is too large");
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
for (j = required; j > 0; j --, kname ++, values ++) {
|
|
982
|
+
mrb_value k = mrb_symbol_value(mrb_intern_cstr(mrb, *kname));
|
|
983
|
+
if (!mrb_hash_key_p(mrb, ksrc, k)) {
|
|
984
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, "missing keyword: %s", *kname);
|
|
985
|
+
}
|
|
986
|
+
*values = mrb_hash_delete_key(mrb, ksrc, k);
|
|
987
|
+
mrb_gc_protect(mrb, *values);
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
for (j = kwnum - required; j > 0; j --, kname ++, values ++) {
|
|
991
|
+
mrb_value k = mrb_symbol_value(mrb_intern_cstr(mrb, *kname));
|
|
992
|
+
if (mrb_hash_key_p(mrb, ksrc, k)) {
|
|
993
|
+
*values = mrb_hash_delete_key(mrb, ksrc, k);
|
|
994
|
+
mrb_gc_protect(mrb, *values);
|
|
995
|
+
}
|
|
996
|
+
else {
|
|
997
|
+
*values = mrb_undef_value();
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
rest = kwargs->rest;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if (rest) {
|
|
1005
|
+
*rest = ksrc;
|
|
1006
|
+
}
|
|
1007
|
+
else if (!mrb_hash_empty_p(mrb, ksrc)) {
|
|
1008
|
+
ksrc = mrb_hash_keys(mrb, ksrc);
|
|
1009
|
+
ksrc = RARRAY_PTR(ksrc)[0];
|
|
1010
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, "unknown keyword: %v", ksrc);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
break;
|
|
1014
|
+
|
|
986
1015
|
default:
|
|
987
|
-
mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid argument specifier %
|
|
1016
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid argument specifier %c", c);
|
|
988
1017
|
break;
|
|
989
1018
|
}
|
|
990
1019
|
}
|
|
@@ -1090,8 +1119,8 @@ include_module_at(mrb_state *mrb, struct RClass *c, struct RClass *ins_pos, stru
|
|
|
1090
1119
|
MRB_API void
|
|
1091
1120
|
mrb_include_module(mrb_state *mrb, struct RClass *c, struct RClass *m)
|
|
1092
1121
|
{
|
|
1093
|
-
|
|
1094
|
-
if (
|
|
1122
|
+
mrb_check_frozen(mrb, c);
|
|
1123
|
+
if (include_module_at(mrb, c, find_origin(c), m, 1) < 0) {
|
|
1095
1124
|
mrb_raise(mrb, E_ARGUMENT_ERROR, "cyclic include detected");
|
|
1096
1125
|
}
|
|
1097
1126
|
}
|
|
@@ -1102,6 +1131,7 @@ mrb_prepend_module(mrb_state *mrb, struct RClass *c, struct RClass *m)
|
|
|
1102
1131
|
struct RClass *origin;
|
|
1103
1132
|
int changed = 0;
|
|
1104
1133
|
|
|
1134
|
+
mrb_check_frozen(mrb, c);
|
|
1105
1135
|
if (!(c->flags & MRB_FL_CLASS_IS_PREPENDED)) {
|
|
1106
1136
|
origin = (struct RClass*)mrb_obj_alloc(mrb, MRB_TT_ICLASS, c);
|
|
1107
1137
|
origin->flags |= MRB_FL_CLASS_IS_ORIGIN | MRB_FL_CLASS_IS_INHERITED;
|
|
@@ -1372,25 +1402,57 @@ mrb_method_search(mrb_state *mrb, struct RClass* c, mrb_sym mid)
|
|
|
1372
1402
|
|
|
1373
1403
|
m = mrb_method_search_vm(mrb, &c, mid);
|
|
1374
1404
|
if (MRB_METHOD_UNDEF_P(m)) {
|
|
1375
|
-
|
|
1376
|
-
if (mrb_string_p(inspect) && RSTRING_LEN(inspect) > 64) {
|
|
1377
|
-
inspect = mrb_any_to_s(mrb, mrb_obj_value(c));
|
|
1378
|
-
}
|
|
1379
|
-
mrb_name_error(mrb, mid, "undefined method '%S' for class %S",
|
|
1380
|
-
mrb_sym2str(mrb, mid), inspect);
|
|
1405
|
+
mrb_name_error(mrb, mid, "undefined method '%n' for class %C", mid, c);
|
|
1381
1406
|
}
|
|
1382
1407
|
return m;
|
|
1383
1408
|
}
|
|
1384
1409
|
|
|
1410
|
+
#define ONSTACK_ALLOC_MAX 32
|
|
1411
|
+
|
|
1412
|
+
static mrb_sym
|
|
1413
|
+
prepare_name_common(mrb_state *mrb, mrb_sym sym, const char *prefix, const char *suffix)
|
|
1414
|
+
{
|
|
1415
|
+
char onstack[ONSTACK_ALLOC_MAX];
|
|
1416
|
+
mrb_int sym_len;
|
|
1417
|
+
const char *sym_str = mrb_sym_name_len(mrb, sym, &sym_len);
|
|
1418
|
+
size_t prefix_len = prefix ? strlen(prefix) : 0;
|
|
1419
|
+
size_t suffix_len = suffix ? strlen(suffix) : 0;
|
|
1420
|
+
size_t name_len = sym_len + prefix_len + suffix_len;
|
|
1421
|
+
char *buf = name_len > sizeof(onstack) ? (char *)mrb_alloca(mrb, name_len) : onstack;
|
|
1422
|
+
char *p = buf;
|
|
1423
|
+
|
|
1424
|
+
if (prefix_len > 0) {
|
|
1425
|
+
memcpy(p, prefix, prefix_len);
|
|
1426
|
+
p += prefix_len;
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
memcpy(p, sym_str, sym_len);
|
|
1430
|
+
p += sym_len;
|
|
1431
|
+
|
|
1432
|
+
if (suffix_len > 0) {
|
|
1433
|
+
memcpy(p, suffix, suffix_len);
|
|
1434
|
+
p += suffix_len;
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
return mrb_intern(mrb, buf, name_len);
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1385
1440
|
static mrb_value
|
|
1386
|
-
|
|
1441
|
+
prepare_ivar_name(mrb_state *mrb, mrb_sym sym)
|
|
1387
1442
|
{
|
|
1388
|
-
|
|
1389
|
-
|
|
1443
|
+
sym = prepare_name_common(mrb, sym, "@", NULL);
|
|
1444
|
+
mrb_iv_name_sym_check(mrb, sym);
|
|
1445
|
+
return mrb_symbol_value(sym);
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
static mrb_sym
|
|
1449
|
+
prepare_writer_name(mrb_state *mrb, mrb_sym sym)
|
|
1450
|
+
{
|
|
1451
|
+
return prepare_name_common(mrb, sym, NULL, "=");
|
|
1390
1452
|
}
|
|
1391
1453
|
|
|
1392
1454
|
static mrb_value
|
|
1393
|
-
|
|
1455
|
+
mod_attr_define(mrb_state *mrb, mrb_value mod, mrb_value (*accessor)(mrb_state *, mrb_value), mrb_sym (*access_name)(mrb_state *, mrb_sym))
|
|
1394
1456
|
{
|
|
1395
1457
|
struct RClass *c = mrb_class_ptr(mod);
|
|
1396
1458
|
mrb_value *argv;
|
|
@@ -1400,20 +1462,18 @@ mrb_mod_attr_reader(mrb_state *mrb, mrb_value mod)
|
|
|
1400
1462
|
mrb_get_args(mrb, "*", &argv, &argc);
|
|
1401
1463
|
ai = mrb_gc_arena_save(mrb);
|
|
1402
1464
|
for (i=0; i<argc; i++) {
|
|
1403
|
-
mrb_value name
|
|
1404
|
-
mrb_sym method
|
|
1465
|
+
mrb_value name;
|
|
1466
|
+
mrb_sym method;
|
|
1405
1467
|
struct RProc *p;
|
|
1406
1468
|
mrb_method_t m;
|
|
1407
1469
|
|
|
1408
1470
|
method = to_sym(mrb, argv[i]);
|
|
1409
|
-
name =
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
name = mrb_symbol_value(sym);
|
|
1416
|
-
p = mrb_proc_new_cfunc_with_env(mrb, attr_reader, 1, &name);
|
|
1471
|
+
name = prepare_ivar_name(mrb, method);
|
|
1472
|
+
if (access_name) {
|
|
1473
|
+
method = access_name(mrb, method);
|
|
1474
|
+
}
|
|
1475
|
+
|
|
1476
|
+
p = mrb_proc_new_cfunc_with_env(mrb, accessor, 1, &name);
|
|
1417
1477
|
MRB_METHOD_FROM_PROC(m, p);
|
|
1418
1478
|
mrb_define_method_raw(mrb, c, method, m);
|
|
1419
1479
|
mrb_gc_arena_restore(mrb, ai);
|
|
@@ -1421,6 +1481,19 @@ mrb_mod_attr_reader(mrb_state *mrb, mrb_value mod)
|
|
|
1421
1481
|
return mrb_nil_value();
|
|
1422
1482
|
}
|
|
1423
1483
|
|
|
1484
|
+
static mrb_value
|
|
1485
|
+
attr_reader(mrb_state *mrb, mrb_value obj)
|
|
1486
|
+
{
|
|
1487
|
+
mrb_value name = mrb_proc_cfunc_env_get(mrb, 0);
|
|
1488
|
+
return mrb_iv_get(mrb, obj, to_sym(mrb, name));
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
static mrb_value
|
|
1492
|
+
mrb_mod_attr_reader(mrb_state *mrb, mrb_value mod)
|
|
1493
|
+
{
|
|
1494
|
+
return mod_attr_define(mrb, mod, attr_reader, NULL);
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1424
1497
|
static mrb_value
|
|
1425
1498
|
attr_writer(mrb_state *mrb, mrb_value obj)
|
|
1426
1499
|
{
|
|
@@ -1435,42 +1508,7 @@ attr_writer(mrb_state *mrb, mrb_value obj)
|
|
|
1435
1508
|
static mrb_value
|
|
1436
1509
|
mrb_mod_attr_writer(mrb_state *mrb, mrb_value mod)
|
|
1437
1510
|
{
|
|
1438
|
-
|
|
1439
|
-
mrb_value *argv;
|
|
1440
|
-
mrb_int argc, i;
|
|
1441
|
-
int ai;
|
|
1442
|
-
|
|
1443
|
-
mrb_get_args(mrb, "*", &argv, &argc);
|
|
1444
|
-
ai = mrb_gc_arena_save(mrb);
|
|
1445
|
-
for (i=0; i<argc; i++) {
|
|
1446
|
-
mrb_value name, str, attr;
|
|
1447
|
-
mrb_sym method, sym;
|
|
1448
|
-
struct RProc *p;
|
|
1449
|
-
mrb_method_t m;
|
|
1450
|
-
|
|
1451
|
-
method = to_sym(mrb, argv[i]);
|
|
1452
|
-
|
|
1453
|
-
/* prepare iv name (@name) */
|
|
1454
|
-
name = mrb_sym2str(mrb, method);
|
|
1455
|
-
str = mrb_str_new_capa(mrb, RSTRING_LEN(name)+1);
|
|
1456
|
-
mrb_str_cat_lit(mrb, str, "@");
|
|
1457
|
-
mrb_str_cat_str(mrb, str, name);
|
|
1458
|
-
sym = mrb_intern_str(mrb, str);
|
|
1459
|
-
mrb_iv_name_sym_check(mrb, sym);
|
|
1460
|
-
attr = mrb_symbol_value(sym);
|
|
1461
|
-
|
|
1462
|
-
/* prepare method name (name=) */
|
|
1463
|
-
str = mrb_str_new_capa(mrb, RSTRING_LEN(str));
|
|
1464
|
-
mrb_str_cat_str(mrb, str, name);
|
|
1465
|
-
mrb_str_cat_lit(mrb, str, "=");
|
|
1466
|
-
method = mrb_intern_str(mrb, str);
|
|
1467
|
-
|
|
1468
|
-
p = mrb_proc_new_cfunc_with_env(mrb, attr_writer, 1, &attr);
|
|
1469
|
-
MRB_METHOD_FROM_PROC(m, p);
|
|
1470
|
-
mrb_define_method_raw(mrb, c, method, m);
|
|
1471
|
-
mrb_gc_arena_restore(mrb, ai);
|
|
1472
|
-
}
|
|
1473
|
-
return mrb_nil_value();
|
|
1511
|
+
return mod_attr_define(mrb, mod, attr_writer, prepare_writer_name);
|
|
1474
1512
|
}
|
|
1475
1513
|
|
|
1476
1514
|
static mrb_value
|
|
@@ -1485,7 +1523,7 @@ mrb_instance_alloc(mrb_state *mrb, mrb_value cv)
|
|
|
1485
1523
|
|
|
1486
1524
|
if (ttype == 0) ttype = MRB_TT_OBJECT;
|
|
1487
1525
|
if (ttype <= MRB_TT_CPTR) {
|
|
1488
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "can't create instance of %
|
|
1526
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "can't create instance of %v", cv);
|
|
1489
1527
|
}
|
|
1490
1528
|
o = (struct RObject*)mrb_obj_alloc(mrb, ttype, c);
|
|
1491
1529
|
return mrb_obj_value(o);
|
|
@@ -1503,29 +1541,20 @@ mrb_instance_alloc(mrb_state *mrb, mrb_value cv)
|
|
|
1503
1541
|
*
|
|
1504
1542
|
*/
|
|
1505
1543
|
|
|
1506
|
-
|
|
1544
|
+
mrb_value
|
|
1507
1545
|
mrb_instance_new(mrb_state *mrb, mrb_value cv)
|
|
1508
1546
|
{
|
|
1509
1547
|
mrb_value obj, blk;
|
|
1510
1548
|
mrb_value *argv;
|
|
1511
1549
|
mrb_int argc;
|
|
1512
1550
|
mrb_sym init;
|
|
1513
|
-
mrb_method_t m;
|
|
1514
1551
|
|
|
1515
|
-
mrb_get_args(mrb, "
|
|
1552
|
+
mrb_get_args(mrb, "*!&", &argv, &argc, &blk);
|
|
1516
1553
|
obj = mrb_instance_alloc(mrb, cv);
|
|
1517
1554
|
init = mrb_intern_lit(mrb, "initialize");
|
|
1518
|
-
|
|
1519
|
-
if (MRB_METHOD_CFUNC_P(m)) {
|
|
1520
|
-
mrb_func_t f = MRB_METHOD_CFUNC(m);
|
|
1521
|
-
if (f != mrb_bob_init) {
|
|
1522
|
-
f(mrb, obj);
|
|
1523
|
-
}
|
|
1524
|
-
}
|
|
1525
|
-
else {
|
|
1555
|
+
if (!mrb_func_basic_p(mrb, obj, init, mrb_bob_init)) {
|
|
1526
1556
|
mrb_funcall_with_block(mrb, obj, init, argc, argv, blk);
|
|
1527
1557
|
}
|
|
1528
|
-
|
|
1529
1558
|
return obj;
|
|
1530
1559
|
}
|
|
1531
1560
|
|
|
@@ -1569,7 +1598,10 @@ mrb_class_new_class(mrb_state *mrb, mrb_value cv)
|
|
|
1569
1598
|
}
|
|
1570
1599
|
new_class = mrb_obj_value(mrb_class_new(mrb, mrb_class_ptr(super)));
|
|
1571
1600
|
mid = mrb_intern_lit(mrb, "initialize");
|
|
1572
|
-
if (
|
|
1601
|
+
if (mrb_func_basic_p(mrb, new_class, mid, mrb_class_initialize)) {
|
|
1602
|
+
mrb_class_initialize(mrb, new_class);
|
|
1603
|
+
}
|
|
1604
|
+
else {
|
|
1573
1605
|
mrb_funcall_with_block(mrb, new_class, mid, n, &super, blk);
|
|
1574
1606
|
}
|
|
1575
1607
|
mrb_class_inherited(mrb, mrb_class_ptr(super), mrb_class_ptr(new_class));
|
|
@@ -1682,7 +1714,7 @@ mrb_class_path(mrb_state *mrb, struct RClass *c)
|
|
|
1682
1714
|
}
|
|
1683
1715
|
else if (mrb_symbol_p(path)) {
|
|
1684
1716
|
/* toplevel class/module */
|
|
1685
|
-
return
|
|
1717
|
+
return mrb_sym_str(mrb, mrb_symbol(path));
|
|
1686
1718
|
}
|
|
1687
1719
|
return mrb_str_dup(mrb, path);
|
|
1688
1720
|
}
|
|
@@ -1721,7 +1753,7 @@ static void
|
|
|
1721
1753
|
mrb_check_inheritable(mrb_state *mrb, struct RClass *super)
|
|
1722
1754
|
{
|
|
1723
1755
|
if (super->tt != MRB_TT_CLASS) {
|
|
1724
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "superclass must be a Class (%
|
|
1756
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "superclass must be a Class (%C given)", super);
|
|
1725
1757
|
}
|
|
1726
1758
|
if (super->tt == MRB_TT_SCLASS) {
|
|
1727
1759
|
mrb_raise(mrb, E_TYPE_ERROR, "can't make subclass of singleton class");
|
|
@@ -1790,11 +1822,31 @@ mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b)
|
|
|
1790
1822
|
{
|
|
1791
1823
|
mrb_method_t m = mrb_method_search(mrb, c, b);
|
|
1792
1824
|
|
|
1825
|
+
if (!MRB_METHOD_CFUNC_P(m)) {
|
|
1826
|
+
struct RProc *p = MRB_METHOD_PROC(m);
|
|
1827
|
+
|
|
1828
|
+
if (MRB_PROC_ENV_P(p)) {
|
|
1829
|
+
MRB_PROC_ENV(p)->mid = b;
|
|
1830
|
+
}
|
|
1831
|
+
else {
|
|
1832
|
+
struct RClass *tc = MRB_PROC_TARGET_CLASS(p);
|
|
1833
|
+
struct REnv *e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, NULL);
|
|
1834
|
+
|
|
1835
|
+
e->mid = b;
|
|
1836
|
+
if (tc) {
|
|
1837
|
+
e->c = tc;
|
|
1838
|
+
mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc);
|
|
1839
|
+
}
|
|
1840
|
+
p->e.env = e;
|
|
1841
|
+
p->flags |= MRB_PROC_ENVSET;
|
|
1842
|
+
}
|
|
1843
|
+
}
|
|
1793
1844
|
mrb_define_method_raw(mrb, c, a, m);
|
|
1794
1845
|
}
|
|
1795
1846
|
|
|
1796
1847
|
/*!
|
|
1797
1848
|
* Defines an alias of a method.
|
|
1849
|
+
* \param mrb the mruby state
|
|
1798
1850
|
* \param klass the class which the original method belongs to
|
|
1799
1851
|
* \param name1 a new name for the method
|
|
1800
1852
|
* \param name2 the original name of the method
|
|
@@ -1818,7 +1870,7 @@ mrb_value
|
|
|
1818
1870
|
mrb_mod_to_s(mrb_state *mrb, mrb_value klass)
|
|
1819
1871
|
{
|
|
1820
1872
|
|
|
1821
|
-
if (
|
|
1873
|
+
if (mrb_sclass_p(klass)) {
|
|
1822
1874
|
mrb_value v = mrb_iv_get(mrb, klass, mrb_intern_lit(mrb, "__attached__"));
|
|
1823
1875
|
mrb_value str = mrb_str_new_lit(mrb, "#<Class:");
|
|
1824
1876
|
|
|
@@ -1843,27 +1895,31 @@ mrb_mod_alias(mrb_state *mrb, mrb_value mod)
|
|
|
1843
1895
|
|
|
1844
1896
|
mrb_get_args(mrb, "nn", &new_name, &old_name);
|
|
1845
1897
|
mrb_alias_method(mrb, c, new_name, old_name);
|
|
1846
|
-
return
|
|
1898
|
+
return mod;
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1901
|
+
static void
|
|
1902
|
+
undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a)
|
|
1903
|
+
{
|
|
1904
|
+
mrb_method_t m;
|
|
1905
|
+
|
|
1906
|
+
MRB_METHOD_FROM_PROC(m, NULL);
|
|
1907
|
+
mrb_define_method_raw(mrb, c, a, m);
|
|
1847
1908
|
}
|
|
1848
1909
|
|
|
1849
1910
|
void
|
|
1850
1911
|
mrb_undef_method_id(mrb_state *mrb, struct RClass *c, mrb_sym a)
|
|
1851
1912
|
{
|
|
1852
1913
|
if (!mrb_obj_respond_to(mrb, c, a)) {
|
|
1853
|
-
mrb_name_error(mrb, a, "undefined method '%
|
|
1854
|
-
}
|
|
1855
|
-
else {
|
|
1856
|
-
mrb_method_t m;
|
|
1857
|
-
|
|
1858
|
-
MRB_METHOD_FROM_PROC(m, NULL);
|
|
1859
|
-
mrb_define_method_raw(mrb, c, a, m);
|
|
1914
|
+
mrb_name_error(mrb, a, "undefined method '%n' for class '%C'", a, c);
|
|
1860
1915
|
}
|
|
1916
|
+
undef_method(mrb, c, a);
|
|
1861
1917
|
}
|
|
1862
1918
|
|
|
1863
1919
|
MRB_API void
|
|
1864
1920
|
mrb_undef_method(mrb_state *mrb, struct RClass *c, const char *name)
|
|
1865
1921
|
{
|
|
1866
|
-
|
|
1922
|
+
undef_method(mrb, c, mrb_intern_cstr(mrb, name));
|
|
1867
1923
|
}
|
|
1868
1924
|
|
|
1869
1925
|
MRB_API void
|
|
@@ -1887,19 +1943,13 @@ mrb_mod_undef(mrb_state *mrb, mrb_value mod)
|
|
|
1887
1943
|
return mrb_nil_value();
|
|
1888
1944
|
}
|
|
1889
1945
|
|
|
1890
|
-
static mrb_bool
|
|
1891
|
-
const_name_p(mrb_state *mrb, const char *name, mrb_int len)
|
|
1892
|
-
{
|
|
1893
|
-
return len > 0 && ISUPPER(name[0]) && mrb_ident_p(name+1, len-1);
|
|
1894
|
-
}
|
|
1895
|
-
|
|
1896
1946
|
static void
|
|
1897
1947
|
check_const_name_sym(mrb_state *mrb, mrb_sym id)
|
|
1898
1948
|
{
|
|
1899
1949
|
mrb_int len;
|
|
1900
|
-
const char *name =
|
|
1901
|
-
if (!
|
|
1902
|
-
mrb_name_error(mrb, id, "wrong constant name %
|
|
1950
|
+
const char *name = mrb_sym_name_len(mrb, id, &len);
|
|
1951
|
+
if (!mrb_const_name_p(mrb, name, len)) {
|
|
1952
|
+
mrb_name_error(mrb, id, "wrong constant name %n", id);
|
|
1903
1953
|
}
|
|
1904
1954
|
}
|
|
1905
1955
|
|
|
@@ -1956,7 +2006,7 @@ mrb_mod_const_get(mrb_state *mrb, mrb_value mod)
|
|
|
1956
2006
|
else {
|
|
1957
2007
|
off = end + 2;
|
|
1958
2008
|
if (off == len) { /* trailing "::" */
|
|
1959
|
-
mrb_name_error(mrb, id, "wrong constant name '%
|
|
2009
|
+
mrb_name_error(mrb, id, "wrong constant name '%v'", path);
|
|
1960
2010
|
}
|
|
1961
2011
|
}
|
|
1962
2012
|
}
|
|
@@ -1986,7 +2036,7 @@ mrb_mod_remove_const(mrb_state *mrb, mrb_value mod)
|
|
|
1986
2036
|
check_const_name_sym(mrb, id);
|
|
1987
2037
|
val = mrb_iv_remove(mrb, mod, id);
|
|
1988
2038
|
if (mrb_undef_p(val)) {
|
|
1989
|
-
mrb_name_error(mrb, id, "constant %
|
|
2039
|
+
mrb_name_error(mrb, id, "constant %n not defined", id);
|
|
1990
2040
|
}
|
|
1991
2041
|
return val;
|
|
1992
2042
|
}
|
|
@@ -1999,13 +2049,10 @@ mrb_mod_const_missing(mrb_state *mrb, mrb_value mod)
|
|
|
1999
2049
|
mrb_get_args(mrb, "n", &sym);
|
|
2000
2050
|
|
|
2001
2051
|
if (mrb_class_real(mrb_class_ptr(mod)) != mrb->object_class) {
|
|
2002
|
-
mrb_name_error(mrb, sym, "uninitialized constant %
|
|
2003
|
-
mod,
|
|
2004
|
-
mrb_sym2str(mrb, sym));
|
|
2052
|
+
mrb_name_error(mrb, sym, "uninitialized constant %v::%n", mod, sym);
|
|
2005
2053
|
}
|
|
2006
2054
|
else {
|
|
2007
|
-
mrb_name_error(mrb, sym, "uninitialized constant %
|
|
2008
|
-
mrb_sym2str(mrb, sym));
|
|
2055
|
+
mrb_name_error(mrb, sym, "uninitialized constant %n", sym);
|
|
2009
2056
|
}
|
|
2010
2057
|
/* not reached */
|
|
2011
2058
|
return mrb_nil_value();
|
|
@@ -2066,7 +2113,7 @@ mod_define_method(mrb_state *mrb, mrb_value self)
|
|
|
2066
2113
|
/* ignored */
|
|
2067
2114
|
break;
|
|
2068
2115
|
default:
|
|
2069
|
-
mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %
|
|
2116
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %T (expected Proc)", proc);
|
|
2070
2117
|
break;
|
|
2071
2118
|
}
|
|
2072
2119
|
if (mrb_nil_p(blk)) {
|
|
@@ -2098,6 +2145,14 @@ mrb_mod_eqq(mrb_state *mrb, mrb_value mod)
|
|
|
2098
2145
|
return mrb_bool_value(eqq);
|
|
2099
2146
|
}
|
|
2100
2147
|
|
|
2148
|
+
static mrb_value
|
|
2149
|
+
mrb_mod_dup(mrb_state *mrb, mrb_value self)
|
|
2150
|
+
{
|
|
2151
|
+
mrb_value mod = mrb_obj_clone(mrb, self);
|
|
2152
|
+
MRB_UNSET_FROZEN_FLAG(mrb_obj_ptr(mod));
|
|
2153
|
+
return mod;
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2101
2156
|
static mrb_value
|
|
2102
2157
|
mrb_mod_module_function(mrb_state *mrb, mrb_value mod)
|
|
2103
2158
|
{
|
|
@@ -2146,6 +2201,40 @@ inspect_main(mrb_state *mrb, mrb_value mod)
|
|
|
2146
2201
|
return mrb_str_new_lit(mrb, "main");
|
|
2147
2202
|
}
|
|
2148
2203
|
|
|
2204
|
+
static const mrb_code new_iseq[] = {
|
|
2205
|
+
OP_ENTER, 0x0, 0x10, 0x1, /* OP_ENTER 0:0:1:0:0:0:1 */
|
|
2206
|
+
OP_LOADSELF, 0x3, /* OP_LOADSELF R3 */
|
|
2207
|
+
OP_SEND, 0x3, 0x0, 0x0, /* OP_SEND R3 :allocate 0 */
|
|
2208
|
+
OP_MOVE, 0x0, 0x3, /* OP_MOVE R0 R3 */
|
|
2209
|
+
OP_MOVE, 0x4, 0x1, /* OP_MOVE R4 R1 */
|
|
2210
|
+
OP_MOVE, 0x5, 0x2, /* OP_MOVE R5 R2 */
|
|
2211
|
+
OP_SENDVB, 0x3, 0x1, /* OP_SENDVB R4 :initialize */
|
|
2212
|
+
OP_RETURN, 0x0 /* OP_RETURN R0 */
|
|
2213
|
+
};
|
|
2214
|
+
|
|
2215
|
+
static void
|
|
2216
|
+
init_class_new(mrb_state *mrb, struct RClass *cls)
|
|
2217
|
+
{
|
|
2218
|
+
struct RProc *p;
|
|
2219
|
+
mrb_method_t m;
|
|
2220
|
+
mrb_irep *new_irep = (mrb_irep*)mrb_malloc(mrb, sizeof(mrb_irep));
|
|
2221
|
+
static const mrb_irep mrb_irep_zero = { 0 };
|
|
2222
|
+
|
|
2223
|
+
*new_irep = mrb_irep_zero;
|
|
2224
|
+
new_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*2);
|
|
2225
|
+
new_irep->syms[0] = mrb_intern_lit(mrb, "allocate");
|
|
2226
|
+
new_irep->syms[1] = mrb_intern_lit(mrb, "initialize");
|
|
2227
|
+
new_irep->slen = 2;
|
|
2228
|
+
new_irep->flags = MRB_ISEQ_NO_FREE;
|
|
2229
|
+
new_irep->iseq = new_iseq;
|
|
2230
|
+
new_irep->ilen = sizeof(new_iseq);
|
|
2231
|
+
new_irep->nregs = 6;
|
|
2232
|
+
new_irep->nlocals = 3;
|
|
2233
|
+
p = mrb_proc_new(mrb, new_irep);
|
|
2234
|
+
MRB_METHOD_FROM_PROC(m, p);
|
|
2235
|
+
mrb_define_method_raw(mrb, cls, mrb_intern_lit(mrb, "new"), m);
|
|
2236
|
+
}
|
|
2237
|
+
|
|
2149
2238
|
void
|
|
2150
2239
|
mrb_init_class(mrb_state *mrb)
|
|
2151
2240
|
{
|
|
@@ -2168,7 +2257,6 @@ mrb_init_class(mrb_state *mrb)
|
|
|
2168
2257
|
|
|
2169
2258
|
/* name basic classes */
|
|
2170
2259
|
mrb_define_const(mrb, bob, "BasicObject", mrb_obj_value(bob));
|
|
2171
|
-
mrb_define_const(mrb, obj, "BasicObject", mrb_obj_value(bob));
|
|
2172
2260
|
mrb_define_const(mrb, obj, "Object", mrb_obj_value(obj));
|
|
2173
2261
|
mrb_define_const(mrb, obj, "Module", mrb_obj_value(mod));
|
|
2174
2262
|
mrb_define_const(mrb, obj, "Class", mrb_obj_value(cls));
|
|
@@ -2188,15 +2276,18 @@ mrb_init_class(mrb_state *mrb)
|
|
|
2188
2276
|
mrb_define_method(mrb, bob, "==", mrb_obj_equal_m, MRB_ARGS_REQ(1)); /* 15.3.1.3.1 */
|
|
2189
2277
|
mrb_define_method(mrb, bob, "!=", mrb_obj_not_equal_m, MRB_ARGS_REQ(1));
|
|
2190
2278
|
mrb_define_method(mrb, bob, "__id__", mrb_obj_id_m, MRB_ARGS_NONE()); /* 15.3.1.3.4 */
|
|
2191
|
-
mrb_define_method(mrb, bob, "__send__", mrb_f_send,
|
|
2192
|
-
mrb_define_method(mrb, bob, "
|
|
2279
|
+
mrb_define_method(mrb, bob, "__send__", mrb_f_send, MRB_ARGS_REQ(1)|MRB_ARGS_REST()|MRB_ARGS_BLOCK()); /* 15.3.1.3.5 */
|
|
2280
|
+
mrb_define_method(mrb, bob, "equal?", mrb_obj_equal_m, MRB_ARGS_REQ(1)); /* 15.3.1.3.11 */
|
|
2281
|
+
mrb_define_method(mrb, bob, "instance_eval", mrb_obj_instance_eval, MRB_ARGS_OPT(1)|MRB_ARGS_BLOCK()); /* 15.3.1.3.18 */
|
|
2193
2282
|
|
|
2194
|
-
mrb_define_class_method(mrb, cls, "new", mrb_class_new_class, MRB_ARGS_OPT(1));
|
|
2283
|
+
mrb_define_class_method(mrb, cls, "new", mrb_class_new_class, MRB_ARGS_OPT(1)|MRB_ARGS_BLOCK());
|
|
2284
|
+
mrb_define_method(mrb, cls, "allocate", mrb_instance_alloc, MRB_ARGS_NONE());
|
|
2195
2285
|
mrb_define_method(mrb, cls, "superclass", mrb_class_superclass, MRB_ARGS_NONE()); /* 15.2.3.3.4 */
|
|
2196
|
-
mrb_define_method(mrb, cls, "new", mrb_instance_new, MRB_ARGS_ANY()); /* 15.2.3.3.3 */
|
|
2197
2286
|
mrb_define_method(mrb, cls, "initialize", mrb_class_initialize, MRB_ARGS_OPT(1)); /* 15.2.3.3.1 */
|
|
2198
2287
|
mrb_define_method(mrb, cls, "inherited", mrb_bob_init, MRB_ARGS_REQ(1));
|
|
2199
2288
|
|
|
2289
|
+
init_class_new(mrb, cls);
|
|
2290
|
+
|
|
2200
2291
|
MRB_SET_INSTANCE_TT(mod, MRB_TT_MODULE);
|
|
2201
2292
|
mrb_define_method(mrb, mod, "extend_object", mrb_mod_extend_object, MRB_ARGS_REQ(1)); /* 15.2.2.4.25 */
|
|
2202
2293
|
mrb_define_method(mrb, mod, "extended", mrb_bob_init, MRB_ARGS_REQ(1)); /* 15.2.2.4.26 */
|
|
@@ -2226,7 +2317,8 @@ mrb_init_class(mrb_state *mrb)
|
|
|
2226
2317
|
mrb_define_method(mrb, mod, "const_missing", mrb_mod_const_missing, MRB_ARGS_REQ(1));
|
|
2227
2318
|
mrb_define_method(mrb, mod, "method_defined?", mrb_mod_method_defined, MRB_ARGS_REQ(1)); /* 15.2.2.4.34 */
|
|
2228
2319
|
mrb_define_method(mrb, mod, "define_method", mod_define_method, MRB_ARGS_ARG(1,1));
|
|
2229
|
-
mrb_define_method(mrb, mod, "===", mrb_mod_eqq, MRB_ARGS_REQ(1));
|
|
2320
|
+
mrb_define_method(mrb, mod, "===", mrb_mod_eqq, MRB_ARGS_REQ(1)); /* 15.2.2.4.7 */
|
|
2321
|
+
mrb_define_method(mrb, mod, "dup", mrb_mod_dup, MRB_ARGS_NONE());
|
|
2230
2322
|
|
|
2231
2323
|
mrb_undef_method(mrb, cls, "append_features");
|
|
2232
2324
|
mrb_undef_method(mrb, cls, "extend_object");
|