enclave 0.1.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 +7 -0
- data/README.md +182 -0
- data/Rakefile +30 -0
- data/ext/enclave/enclave.c +390 -0
- data/ext/enclave/extconf.rb +33 -0
- data/ext/enclave/mruby/Makefile +63 -0
- data/ext/enclave/mruby/Rakefile +102 -0
- data/ext/enclave/mruby/benchmark/bm_ao_render.rb +309 -0
- data/ext/enclave/mruby/benchmark/bm_app_lc_fizzbuzz.rb +51 -0
- data/ext/enclave/mruby/benchmark/bm_fib.rb +6 -0
- data/ext/enclave/mruby/benchmark/bm_mandel_term.rb +34 -0
- data/ext/enclave/mruby/benchmark/bm_so_lists.rb +49 -0
- data/ext/enclave/mruby/benchmark/bm_so_mandelbrot.rb +65 -0
- data/ext/enclave/mruby/benchmark/vm_dispatch_bench.c +197 -0
- data/ext/enclave/mruby/benchmark/vm_optimization_bench.rb +513 -0
- data/ext/enclave/mruby/build/host/include/mrbconf.h +230 -0
- data/ext/enclave/mruby/build/host/include/mruby/array.h +303 -0
- data/ext/enclave/mruby/build/host/include/mruby/boxing_nan.h +169 -0
- data/ext/enclave/mruby/build/host/include/mruby/boxing_no.h +59 -0
- data/ext/enclave/mruby/build/host/include/mruby/boxing_word.h +248 -0
- data/ext/enclave/mruby/build/host/include/mruby/class.h +157 -0
- data/ext/enclave/mruby/build/host/include/mruby/common.h +127 -0
- data/ext/enclave/mruby/build/host/include/mruby/compile.h +187 -0
- data/ext/enclave/mruby/build/host/include/mruby/data.h +76 -0
- data/ext/enclave/mruby/build/host/include/mruby/debug.h +75 -0
- data/ext/enclave/mruby/build/host/include/mruby/dump.h +159 -0
- data/ext/enclave/mruby/build/host/include/mruby/endian.h +44 -0
- data/ext/enclave/mruby/build/host/include/mruby/error.h +168 -0
- data/ext/enclave/mruby/build/host/include/mruby/gc.h +77 -0
- data/ext/enclave/mruby/build/host/include/mruby/hash.h +234 -0
- data/ext/enclave/mruby/build/host/include/mruby/internal.h +278 -0
- data/ext/enclave/mruby/build/host/include/mruby/irep.h +142 -0
- data/ext/enclave/mruby/build/host/include/mruby/istruct.h +50 -0
- data/ext/enclave/mruby/build/host/include/mruby/khash.h +455 -0
- data/ext/enclave/mruby/build/host/include/mruby/mempool.h +19 -0
- data/ext/enclave/mruby/build/host/include/mruby/numeric.h +174 -0
- data/ext/enclave/mruby/build/host/include/mruby/object.h +44 -0
- data/ext/enclave/mruby/build/host/include/mruby/opcode.h +73 -0
- data/ext/enclave/mruby/build/host/include/mruby/ops.h +133 -0
- data/ext/enclave/mruby/build/host/include/mruby/presym/id.h +895 -0
- data/ext/enclave/mruby/build/host/include/mruby/presym/scanning.h +82 -0
- data/ext/enclave/mruby/build/host/include/mruby/presym/table.h +1787 -0
- data/ext/enclave/mruby/build/host/include/mruby/presym.h +65 -0
- data/ext/enclave/mruby/build/host/include/mruby/proc.h +184 -0
- data/ext/enclave/mruby/build/host/include/mruby/range.h +77 -0
- data/ext/enclave/mruby/build/host/include/mruby/re.h +16 -0
- data/ext/enclave/mruby/build/host/include/mruby/string.h +428 -0
- data/ext/enclave/mruby/build/host/include/mruby/throw.h +81 -0
- data/ext/enclave/mruby/build/host/include/mruby/value.h +471 -0
- data/ext/enclave/mruby/build/host/include/mruby/variable.h +108 -0
- data/ext/enclave/mruby/build/host/include/mruby/version.h +143 -0
- data/ext/enclave/mruby/build/host/include/mruby.h +1632 -0
- data/ext/enclave/mruby/build/host/mrbc/include/mruby/presym/id.h +281 -0
- data/ext/enclave/mruby/build/host/mrbc/include/mruby/presym/table.h +559 -0
- data/ext/enclave/mruby/build/host/mrbgems/gem_init.c +164 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-array-ext/gem_init.c +650 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-binding/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-catch/gem_init.c +86 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-class-ext/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-compar-ext/gem_init.c +99 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-complex/gem_init.c +362 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-data/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-enum-chain/gem_init.c +229 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-enum-ext/gem_init.c +1420 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-enum-lazy/gem_init.c +602 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-enumerator/gem_init.c +822 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-eval/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-fiber/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-hash-ext/gem_init.c +591 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-kernel-ext/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-math/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-metaprog/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-method/gem_init.c +153 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-numeric-ext/gem_init.c +211 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-object-ext/gem_init.c +94 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-objectspace/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-pack/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-proc-binding/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-proc-ext/gem_init.c +237 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-random/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-range-ext/gem_init.c +205 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-rational/gem_init.c +147 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-set/gem_init.c +487 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-sprintf/gem_init.c +83 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-string-ext/gem_init.c +220 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-struct/gem_init.c +175 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-symbol-ext/gem_init.c +153 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-time/gem_init.c +21 -0
- data/ext/enclave/mruby/build/host/mrbgems/mruby-toplevel-ext/gem_init.c +78 -0
- data/ext/enclave/mruby/build/host/mrblib/mrblib.c +1758 -0
- data/ext/enclave/mruby/build_config/ArduinoDue.rb +72 -0
- data/ext/enclave/mruby/build_config/IntelEdison.rb +69 -0
- data/ext/enclave/mruby/build_config/IntelGalileo.rb +88 -0
- data/ext/enclave/mruby/build_config/RX630.rb +63 -0
- data/ext/enclave/mruby/build_config/android_arm64_v8a.rb +11 -0
- data/ext/enclave/mruby/build_config/android_armeabi_v7a_neon_hard.rb +13 -0
- data/ext/enclave/mruby/build_config/bench.rb +11 -0
- data/ext/enclave/mruby/build_config/boxing.rb +19 -0
- data/ext/enclave/mruby/build_config/chipKITMax32.rb +68 -0
- data/ext/enclave/mruby/build_config/ci/gcc-clang.rb +40 -0
- data/ext/enclave/mruby/build_config/ci/msvc.rb +20 -0
- data/ext/enclave/mruby/build_config/clang-asan.rb +11 -0
- data/ext/enclave/mruby/build_config/cosmopolitan.rb +86 -0
- data/ext/enclave/mruby/build_config/cross-32bit.rb +14 -0
- data/ext/enclave/mruby/build_config/cross-mingw-winetest.rb +90 -0
- data/ext/enclave/mruby/build_config/cross-mingw.rb +14 -0
- data/ext/enclave/mruby/build_config/default.rb +83 -0
- data/ext/enclave/mruby/build_config/dreamcast_shelf.rb +81 -0
- data/ext/enclave/mruby/build_config/emscripten-cxx.rb +12 -0
- data/ext/enclave/mruby/build_config/emscripten.rb +10 -0
- data/ext/enclave/mruby/build_config/gameboyadvance.rb +72 -0
- data/ext/enclave/mruby/build_config/helpers/wine_runner.rb +71 -0
- data/ext/enclave/mruby/build_config/host-cxx.rb +12 -0
- data/ext/enclave/mruby/build_config/host-debug.rb +20 -0
- data/ext/enclave/mruby/build_config/host-f32.rb +14 -0
- data/ext/enclave/mruby/build_config/host-gprof.rb +14 -0
- data/ext/enclave/mruby/build_config/host-m32.rb +15 -0
- data/ext/enclave/mruby/build_config/host-nofloat.rb +22 -0
- data/ext/enclave/mruby/build_config/host-shared.rb +36 -0
- data/ext/enclave/mruby/build_config/i586-pc-msdosdjgpp.rb +76 -0
- data/ext/enclave/mruby/build_config/luckfox_pico.rb +106 -0
- data/ext/enclave/mruby/build_config/milkv_duo.rb +106 -0
- data/ext/enclave/mruby/build_config/minimal.rb +4 -0
- data/ext/enclave/mruby/build_config/mrbc.rb +10 -0
- data/ext/enclave/mruby/build_config/nintendo_switch.rb +73 -0
- data/ext/enclave/mruby/build_config/nintendo_wii.rb +95 -0
- data/ext/enclave/mruby/build_config/no-float.rb +17 -0
- data/ext/enclave/mruby/build_config/playstationportable.rb +78 -0
- data/ext/enclave/mruby/build_config/serenity.rb +26 -0
- data/ext/enclave/mruby/build_config.rb +9 -0
- data/ext/enclave/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +5 -0
- data/ext/enclave/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +23 -0
- data/ext/enclave/mruby/examples/mrbgems/c_and_ruby_extension_example/test/example.rb +7 -0
- data/ext/enclave/mruby/examples/mrbgems/c_extension_example/src/example.c +23 -0
- data/ext/enclave/mruby/examples/mrbgems/c_extension_example/test/example.c +7 -0
- data/ext/enclave/mruby/examples/mrbgems/c_extension_example/test/example.rb +3 -0
- data/ext/enclave/mruby/examples/mrbgems/cdata_extension_example/src/example.c +77 -0
- data/ext/enclave/mruby/examples/mrbgems/cdata_extension_example/test/example.c +7 -0
- data/ext/enclave/mruby/examples/mrbgems/mruby-YOUR-bigint/core/bigint.c +70 -0
- data/ext/enclave/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +5 -0
- data/ext/enclave/mruby/examples/mrbgems/ruby_extension_example/test/example.rb +3 -0
- data/ext/enclave/mruby/include/mrbconf.h +230 -0
- data/ext/enclave/mruby/include/mruby/array.h +303 -0
- data/ext/enclave/mruby/include/mruby/boxing_nan.h +169 -0
- data/ext/enclave/mruby/include/mruby/boxing_no.h +59 -0
- data/ext/enclave/mruby/include/mruby/boxing_word.h +248 -0
- data/ext/enclave/mruby/include/mruby/class.h +157 -0
- data/ext/enclave/mruby/include/mruby/common.h +127 -0
- data/ext/enclave/mruby/include/mruby/compile.h +187 -0
- data/ext/enclave/mruby/include/mruby/data.h +76 -0
- data/ext/enclave/mruby/include/mruby/debug.h +75 -0
- data/ext/enclave/mruby/include/mruby/dump.h +159 -0
- data/ext/enclave/mruby/include/mruby/endian.h +44 -0
- data/ext/enclave/mruby/include/mruby/error.h +168 -0
- data/ext/enclave/mruby/include/mruby/gc.h +77 -0
- data/ext/enclave/mruby/include/mruby/hash.h +234 -0
- data/ext/enclave/mruby/include/mruby/internal.h +278 -0
- data/ext/enclave/mruby/include/mruby/irep.h +142 -0
- data/ext/enclave/mruby/include/mruby/istruct.h +50 -0
- data/ext/enclave/mruby/include/mruby/khash.h +455 -0
- data/ext/enclave/mruby/include/mruby/mempool.h +19 -0
- data/ext/enclave/mruby/include/mruby/numeric.h +174 -0
- data/ext/enclave/mruby/include/mruby/object.h +44 -0
- data/ext/enclave/mruby/include/mruby/opcode.h +73 -0
- data/ext/enclave/mruby/include/mruby/ops.h +133 -0
- data/ext/enclave/mruby/include/mruby/presym/scanning.h +82 -0
- data/ext/enclave/mruby/include/mruby/presym.h +65 -0
- data/ext/enclave/mruby/include/mruby/proc.h +184 -0
- data/ext/enclave/mruby/include/mruby/range.h +77 -0
- data/ext/enclave/mruby/include/mruby/re.h +16 -0
- data/ext/enclave/mruby/include/mruby/string.h +428 -0
- data/ext/enclave/mruby/include/mruby/throw.h +81 -0
- data/ext/enclave/mruby/include/mruby/value.h +471 -0
- data/ext/enclave/mruby/include/mruby/variable.h +108 -0
- data/ext/enclave/mruby/include/mruby/version.h +143 -0
- data/ext/enclave/mruby/include/mruby.h +1632 -0
- data/ext/enclave/mruby/lib/mruby/amalgam.rb +568 -0
- data/ext/enclave/mruby/lib/mruby/build/command.rb +383 -0
- data/ext/enclave/mruby/lib/mruby/build/load_gems.rb +383 -0
- data/ext/enclave/mruby/lib/mruby/build.rb +616 -0
- data/ext/enclave/mruby/lib/mruby/core_ext.rb +61 -0
- data/ext/enclave/mruby/lib/mruby/doc.rb +51 -0
- data/ext/enclave/mruby/lib/mruby/gem.rb +585 -0
- data/ext/enclave/mruby/lib/mruby/lockfile.rb +81 -0
- data/ext/enclave/mruby/lib/mruby/presym.rb +167 -0
- data/ext/enclave/mruby/lib/mruby/source.rb +32 -0
- data/ext/enclave/mruby/mrbgems/default-no-fpu.gembox +3 -0
- data/ext/enclave/mruby/mrbgems/default-no-stdio.gembox +4 -0
- data/ext/enclave/mruby/mrbgems/default.gembox +25 -0
- data/ext/enclave/mruby/mrbgems/full-core.gembox +6 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-dir/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-dir/src/dir_hal.c +193 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-io/mrbgem.rake +8 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-io/src/io_hal.c +602 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-socket/mrbgem.rake +8 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-socket/src/socket_hal.c +158 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-task/README.md +102 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-task/mrbgem.rake +8 -0
- data/ext/enclave/mruby/mrbgems/hal-posix-task/src/task_hal.c +252 -0
- data/ext/enclave/mruby/mrbgems/hal-win-dir/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/hal-win-dir/src/dir_hal.c +249 -0
- data/ext/enclave/mruby/mrbgems/hal-win-io/mrbgem.rake +11 -0
- data/ext/enclave/mruby/mrbgems/hal-win-io/src/io_hal.c +646 -0
- data/ext/enclave/mruby/mrbgems/hal-win-socket/mrbgem.rake +12 -0
- data/ext/enclave/mruby/mrbgems/hal-win-socket/src/socket_hal.c +177 -0
- data/ext/enclave/mruby/mrbgems/hal-win-task/README.md +109 -0
- data/ext/enclave/mruby/mrbgems/hal-win-task/mrbgem.rake +11 -0
- data/ext/enclave/mruby/mrbgems/hal-win-task/src/task_hal.c +187 -0
- data/ext/enclave/mruby/mrbgems/math.gembox +12 -0
- data/ext/enclave/mruby/mrbgems/metaprog.gembox +21 -0
- data/ext/enclave/mruby/mrbgems/mruby-array-ext/README.md +87 -0
- data/ext/enclave/mruby/mrbgems/mruby-array-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +784 -0
- data/ext/enclave/mruby/mrbgems/mruby-array-ext/src/array.c +1583 -0
- data/ext/enclave/mruby/mrbgems/mruby-array-ext/test/array.rb +849 -0
- data/ext/enclave/mruby/mrbgems/mruby-benchmark/README.md +257 -0
- data/ext/enclave/mruby/mrbgems/mruby-benchmark/mrbgem.rake +10 -0
- data/ext/enclave/mruby/mrbgems/mruby-benchmark/mrblib/benchmark.rb +131 -0
- data/ext/enclave/mruby/mrbgems/mruby-benchmark/test/benchmark.rb +244 -0
- data/ext/enclave/mruby/mrbgems/mruby-bigint/README-fgmp.md +154 -0
- data/ext/enclave/mruby/mrbgems/mruby-bigint/README.md +44 -0
- data/ext/enclave/mruby/mrbgems/mruby-bigint/core/bigint.c +6335 -0
- data/ext/enclave/mruby/mrbgems/mruby-bigint/core/bigint.h +117 -0
- data/ext/enclave/mruby/mrbgems/mruby-bigint/mrbgem.rake +10 -0
- data/ext/enclave/mruby/mrbgems/mruby-bigint/test/bigint.rb +157 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-config/README.md +46 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-config/mrbgem.rake +49 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-config/mruby-config +46 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-config/mruby-config.bat +92 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/README.md +63 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +283 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +703 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/mrbgem.rake +10 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +523 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.h +26 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c +238 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.h +14 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +88 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.h +13 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.c +34 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.h +14 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c +436 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c +509 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c +71 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c +64 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +768 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +159 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +24 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h +19 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/README.md +94 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +58 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +808 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_buffer.c +1035 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_buffer.h +185 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_completion.c +797 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_completion.h +132 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_editor.c +1118 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_editor.h +153 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_highlight.c +516 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_highlight.h +95 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_history.c +185 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_history.h +76 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_term.c +491 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_term.h +137 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/README.md +58 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/bintest/mrbc.rb +30 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +15 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +362 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/stub.c +104 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/README.md +47 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +178 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +380 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-strip/README.md +38 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-strip/bintest/mruby_strip.rb +73 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-strip/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby_strip.c +139 -0
- data/ext/enclave/mruby/mrbgems/mruby-binding/README.md +256 -0
- data/ext/enclave/mruby/mrbgems/mruby-binding/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-binding/src/binding.c +518 -0
- data/ext/enclave/mruby/mrbgems/mruby-binding/test/binding.c +14 -0
- data/ext/enclave/mruby/mrbgems/mruby-binding/test/binding.rb +64 -0
- data/ext/enclave/mruby/mrbgems/mruby-catch/README.md +94 -0
- data/ext/enclave/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-catch/mrblib/catch.rb +29 -0
- data/ext/enclave/mruby/mrbgems/mruby-catch/src/catch.c +149 -0
- data/ext/enclave/mruby/mrbgems/mruby-catch/test/catch.rb +86 -0
- data/ext/enclave/mruby/mrbgems/mruby-class-ext/README.md +81 -0
- data/ext/enclave/mruby/mrbgems/mruby-class-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-class-ext/src/class.c +377 -0
- data/ext/enclave/mruby/mrbgems/mruby-class-ext/test/class.rb +46 -0
- data/ext/enclave/mruby/mrbgems/mruby-class-ext/test/module.rb +109 -0
- data/ext/enclave/mruby/mrbgems/mruby-cmath/README.md +45 -0
- data/ext/enclave/mruby/mrbgems/mruby-cmath/mrbgem.rake +8 -0
- data/ext/enclave/mruby/mrbgems/mruby-cmath/src/cmath.c +426 -0
- data/ext/enclave/mruby/mrbgems/mruby-cmath/test/cmath.rb +41 -0
- data/ext/enclave/mruby/mrbgems/mruby-compar-ext/README.md +65 -0
- data/ext/enclave/mruby/mrbgems/mruby-compar-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-compar-ext/mrblib/compar.rb +75 -0
- data/ext/enclave/mruby/mrbgems/mruby-compar-ext/test/compar.rb +21 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/README.md +28 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/core/codegen.c +7316 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/core/keywords +52 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/core/lex.def +207 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/core/node.h +784 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/core/parse.y +8977 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/core/y.tab.c +16136 -0
- data/ext/enclave/mruby/mrbgems/mruby-compiler/mrbgem.rake +42 -0
- data/ext/enclave/mruby/mrbgems/mruby-complex/README.md +55 -0
- data/ext/enclave/mruby/mrbgems/mruby-complex/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-complex/mrblib/complex.rb +259 -0
- data/ext/enclave/mruby/mrbgems/mruby-complex/src/complex.c +597 -0
- data/ext/enclave/mruby/mrbgems/mruby-complex/test/complex.rb +174 -0
- data/ext/enclave/mruby/mrbgems/mruby-data/README.md +126 -0
- data/ext/enclave/mruby/mrbgems/mruby-data/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-data/src/data.c +550 -0
- data/ext/enclave/mruby/mrbgems/mruby-data/test/data.rb +76 -0
- data/ext/enclave/mruby/mrbgems/mruby-dir/README.md +53 -0
- data/ext/enclave/mruby/mrbgems/mruby-dir/include/dir_hal.h +79 -0
- data/ext/enclave/mruby/mrbgems/mruby-dir/mrbgem.rake +35 -0
- data/ext/enclave/mruby/mrbgems/mruby-dir/mrblib/dir.rb +124 -0
- data/ext/enclave/mruby/mrbgems/mruby-dir/src/dir.c +493 -0
- data/ext/enclave/mruby/mrbgems/mruby-dir/test/dir.rb +138 -0
- data/ext/enclave/mruby/mrbgems/mruby-dir/test/dirtest.c +125 -0
- data/ext/enclave/mruby/mrbgems/mruby-encoding/README.md +96 -0
- data/ext/enclave/mruby/mrbgems/mruby-encoding/mrbgem.rake +8 -0
- data/ext/enclave/mruby/mrbgems/mruby-encoding/src/encoding.c +128 -0
- data/ext/enclave/mruby/mrbgems/mruby-encoding/test/numeric.rb +27 -0
- data/ext/enclave/mruby/mrbgems/mruby-encoding/test/string.rb +30 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-chain/README.md +80 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-chain/mrbgem.rake +6 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-chain/mrblib/chain.rb +149 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-chain/test/enum_chain.rb +108 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-ext/README.md +487 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +938 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-ext/test/enum.rb +223 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/README.md +91 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/mrblib/lazy.rb +363 -0
- data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/test/lazy.rb +59 -0
- data/ext/enclave/mruby/mrbgems/mruby-enumerator/README.md +89 -0
- data/ext/enclave/mruby/mrbgems/mruby-enumerator/mrbgem.rake +6 -0
- data/ext/enclave/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +861 -0
- data/ext/enclave/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +664 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/README.md +83 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/mrblib/errno.rb +50 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/src/errno.c +335 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/src/gen.rb +18 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/src/known_errors.def +156 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/src/known_errors_def.cstub +780 -0
- data/ext/enclave/mruby/mrbgems/mruby-errno/test/errno.rb +57 -0
- data/ext/enclave/mruby/mrbgems/mruby-error/README.md +103 -0
- data/ext/enclave/mruby/mrbgems/mruby-error/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-error/src/exception.c +143 -0
- data/ext/enclave/mruby/mrbgems/mruby-error/test/exception.c +60 -0
- data/ext/enclave/mruby/mrbgems/mruby-error/test/exception.rb +55 -0
- data/ext/enclave/mruby/mrbgems/mruby-eval/README.md +26 -0
- data/ext/enclave/mruby/mrbgems/mruby-eval/mrbgem.rake +10 -0
- data/ext/enclave/mruby/mrbgems/mruby-eval/src/eval.c +437 -0
- data/ext/enclave/mruby/mrbgems/mruby-eval/test/binding.rb +81 -0
- data/ext/enclave/mruby/mrbgems/mruby-eval/test/eval.rb +185 -0
- data/ext/enclave/mruby/mrbgems/mruby-exit/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-exit/src/mruby_exit.c +83 -0
- data/ext/enclave/mruby/mrbgems/mruby-fiber/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-fiber/src/fiber.c +575 -0
- data/ext/enclave/mruby/mrbgems/mruby-fiber/test/fiber.rb +210 -0
- data/ext/enclave/mruby/mrbgems/mruby-fiber/test/fiber2.rb +155 -0
- data/ext/enclave/mruby/mrbgems/mruby-fiber/test/fibertest.c +87 -0
- data/ext/enclave/mruby/mrbgems/mruby-hash-ext/README.md +392 -0
- data/ext/enclave/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +6 -0
- data/ext/enclave/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +408 -0
- data/ext/enclave/mruby/mrbgems/mruby-hash-ext/src/hash_ext.c +392 -0
- data/ext/enclave/mruby/mrbgems/mruby-hash-ext/test/hash.rb +317 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/README.md +198 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/include/io_hal.h +451 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/include/mruby/io.h +76 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/mrbgem.rake +34 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/file.rb +109 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +24 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/io.rb +303 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/kernel.rb +175 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/src/file.c +1192 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/src/file_test.c +403 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/src/io.c +2260 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/src/mruby_io_gem.c +21 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/test/file.rb +415 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/test/file_test.rb +112 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/test/io.rb +668 -0
- data/ext/enclave/mruby/mrbgems/mruby-io/test/mruby_io_test.c +293 -0
- data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/README.md +165 -0
- data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +316 -0
- data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/test/kernel.rb +134 -0
- data/ext/enclave/mruby/mrbgems/mruby-math/README.md +77 -0
- data/ext/enclave/mruby/mrbgems/mruby-math/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-math/src/math.c +753 -0
- data/ext/enclave/mruby/mrbgems/mruby-math/test/math.rb +201 -0
- data/ext/enclave/mruby/mrbgems/mruby-metaprog/README.md +123 -0
- data/ext/enclave/mruby/mrbgems/mruby-metaprog/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-metaprog/src/metaprog.c +739 -0
- data/ext/enclave/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +465 -0
- data/ext/enclave/mruby/mrbgems/mruby-method/README.md +66 -0
- data/ext/enclave/mruby/mrbgems/mruby-method/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-method/mrblib/method.rb +73 -0
- data/ext/enclave/mruby/mrbgems/mruby-method/src/method.c +890 -0
- data/ext/enclave/mruby/mrbgems/mruby-method/test/method.rb +514 -0
- data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/README.md +78 -0
- data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +125 -0
- data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +527 -0
- data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +137 -0
- data/ext/enclave/mruby/mrbgems/mruby-object-ext/README.md +144 -0
- data/ext/enclave/mruby/mrbgems/mruby-object-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-object-ext/mrblib/object.rb +33 -0
- data/ext/enclave/mruby/mrbgems/mruby-object-ext/src/object.c +128 -0
- data/ext/enclave/mruby/mrbgems/mruby-object-ext/test/nil.rb +16 -0
- data/ext/enclave/mruby/mrbgems/mruby-object-ext/test/object.rb +67 -0
- data/ext/enclave/mruby/mrbgems/mruby-object-ext/test/object_ext.c +17 -0
- data/ext/enclave/mruby/mrbgems/mruby-objectspace/README.md +59 -0
- data/ext/enclave/mruby/mrbgems/mruby-objectspace/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +188 -0
- data/ext/enclave/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +60 -0
- data/ext/enclave/mruby/mrbgems/mruby-os-memsize/README.md +75 -0
- data/ext/enclave/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
- data/ext/enclave/mruby/mrbgems/mruby-os-memsize/src/memsize.c +271 -0
- data/ext/enclave/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
- data/ext/enclave/mruby/mrbgems/mruby-pack/README.md +140 -0
- data/ext/enclave/mruby/mrbgems/mruby-pack/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-pack/src/pack.c +2129 -0
- data/ext/enclave/mruby/mrbgems/mruby-pack/test/pack.rb +202 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-binding/README.md +140 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-binding/mrbgem.rake +10 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-binding/src/proc_binding.c +76 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-binding/test/proc_binding.c +14 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-binding/test/proc_binding.rb +22 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-ext/README.md +107 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-ext/mrblib/proc.rb +130 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-ext/src/proc.c +267 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-ext/test/proc.c +62 -0
- data/ext/enclave/mruby/mrbgems/mruby-proc-ext/test/proc.rb +130 -0
- data/ext/enclave/mruby/mrbgems/mruby-random/README.md +272 -0
- data/ext/enclave/mruby/mrbgems/mruby-random/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-random/src/random.c +608 -0
- data/ext/enclave/mruby/mrbgems/mruby-random/test/random.rb +151 -0
- data/ext/enclave/mruby/mrbgems/mruby-range-ext/README.md +93 -0
- data/ext/enclave/mruby/mrbgems/mruby-range-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +155 -0
- data/ext/enclave/mruby/mrbgems/mruby-range-ext/src/range.c +236 -0
- data/ext/enclave/mruby/mrbgems/mruby-range-ext/test/range.rb +211 -0
- data/ext/enclave/mruby/mrbgems/mruby-rational/README.md +61 -0
- data/ext/enclave/mruby/mrbgems/mruby-rational/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-rational/mrblib/rational.rb +66 -0
- data/ext/enclave/mruby/mrbgems/mruby-rational/src/rational.c +1269 -0
- data/ext/enclave/mruby/mrbgems/mruby-rational/test/rational.rb +316 -0
- data/ext/enclave/mruby/mrbgems/mruby-set/LICENSE +24 -0
- data/ext/enclave/mruby/mrbgems/mruby-set/README.md +260 -0
- data/ext/enclave/mruby/mrbgems/mruby-set/mrbgem.rake +9 -0
- data/ext/enclave/mruby/mrbgems/mruby-set/mrblib/set.rb +325 -0
- data/ext/enclave/mruby/mrbgems/mruby-set/mruby-set.gem +6 -0
- data/ext/enclave/mruby/mrbgems/mruby-set/src/set.c +1535 -0
- data/ext/enclave/mruby/mrbgems/mruby-set/test/set.rb +764 -0
- data/ext/enclave/mruby/mrbgems/mruby-sleep/README.md +29 -0
- data/ext/enclave/mruby/mrbgems/mruby-sleep/example/sleep.rb +2 -0
- data/ext/enclave/mruby/mrbgems/mruby-sleep/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-sleep/src/sleep.c +187 -0
- data/ext/enclave/mruby/mrbgems/mruby-sleep/test/sleep_test.rb +29 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/README.md +56 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/include/socket_hal.h +83 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/mrbgem.rake +37 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/mrblib/socket.rb +1131 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/src/const.cstub +480 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/src/const.def +172 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/src/gen.rb +17 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/src/socket.c +1374 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/addrinfo.rb +91 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/basicsocket.rb +17 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/ipsocket.rb +44 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/socket.rb +38 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/sockettest.c +84 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/tcpsocket.rb +4 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/udpsocket.rb +16 -0
- data/ext/enclave/mruby/mrbgems/mruby-socket/test/unix.rb +130 -0
- data/ext/enclave/mruby/mrbgems/mruby-sprintf/README.md +235 -0
- data/ext/enclave/mruby/mrbgems/mruby-sprintf/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-sprintf/mrblib/string.rb +24 -0
- data/ext/enclave/mruby/mrbgems/mruby-sprintf/src/sprintf.c +1195 -0
- data/ext/enclave/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +92 -0
- data/ext/enclave/mruby/mrbgems/mruby-strftime/README.md +140 -0
- data/ext/enclave/mruby/mrbgems/mruby-strftime/mrbgem.rake +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-strftime/src/strftime.c +119 -0
- data/ext/enclave/mruby/mrbgems/mruby-strftime/test/strftime.rb +152 -0
- data/ext/enclave/mruby/mrbgems/mruby-string-ext/README.md +886 -0
- data/ext/enclave/mruby/mrbgems/mruby-string-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +166 -0
- data/ext/enclave/mruby/mrbgems/mruby-string-ext/src/string.c +2290 -0
- data/ext/enclave/mruby/mrbgems/mruby-string-ext/test/numeric.rb +27 -0
- data/ext/enclave/mruby/mrbgems/mruby-string-ext/test/range.rb +26 -0
- data/ext/enclave/mruby/mrbgems/mruby-string-ext/test/string.rb +765 -0
- data/ext/enclave/mruby/mrbgems/mruby-struct/README.md +105 -0
- data/ext/enclave/mruby/mrbgems/mruby-struct/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-struct/mrblib/struct.rb +69 -0
- data/ext/enclave/mruby/mrbgems/mruby-struct/src/struct.c +812 -0
- data/ext/enclave/mruby/mrbgems/mruby-struct/test/struct.rb +303 -0
- data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/README.md +50 -0
- data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +72 -0
- data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +79 -0
- data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +55 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/README.md +770 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/examples/inspection.rb +65 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/examples/priority.rb +41 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/examples/producer_consumer.rb +58 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/examples/simple.rb +27 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/examples/statistics.rb +59 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/examples/suspend_resume.rb +47 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/examples/task_pass.rb +21 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/include/task.h +143 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/include/task_hal.h +162 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/mrbgem.rake +36 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/src/task.c +1573 -0
- data/ext/enclave/mruby/mrbgems/mruby-task/test/task.rb +185 -0
- data/ext/enclave/mruby/mrbgems/mruby-test/README.md +7 -0
- data/ext/enclave/mruby/mrbgems/mruby-test/driver.c +315 -0
- data/ext/enclave/mruby/mrbgems/mruby-test/mrbgem.rake +173 -0
- data/ext/enclave/mruby/mrbgems/mruby-test/vformat.c +151 -0
- data/ext/enclave/mruby/mrbgems/mruby-test-inline-struct/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-test-inline-struct/test/inline.c +92 -0
- data/ext/enclave/mruby/mrbgems/mruby-test-inline-struct/test/inline.rb +118 -0
- data/ext/enclave/mruby/mrbgems/mruby-time/README.md +102 -0
- data/ext/enclave/mruby/mrbgems/mruby-time/include/mruby/time.h +27 -0
- data/ext/enclave/mruby/mrbgems/mruby-time/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-time/src/time.c +1739 -0
- data/ext/enclave/mruby/mrbgems/mruby-time/test/time.rb +313 -0
- data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/README.md +32 -0
- data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +5 -0
- data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb +24 -0
- data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +23 -0
- data/ext/enclave/mruby/mrbgems/stdlib-ext.gembox +21 -0
- data/ext/enclave/mruby/mrbgems/stdlib-io.gembox +15 -0
- data/ext/enclave/mruby/mrbgems/stdlib.gembox +63 -0
- data/ext/enclave/mruby/mrblib/10error.rb +23 -0
- data/ext/enclave/mruby/mrblib/array.rb +102 -0
- data/ext/enclave/mruby/mrblib/compar.rb +102 -0
- data/ext/enclave/mruby/mrblib/enum.rb +358 -0
- data/ext/enclave/mruby/mrblib/hash.rb +276 -0
- data/ext/enclave/mruby/mrblib/kernel.rb +45 -0
- data/ext/enclave/mruby/mrblib/numeric.rb +160 -0
- data/ext/enclave/mruby/mrblib/range.rb +98 -0
- data/ext/enclave/mruby/mrblib/string.rb +173 -0
- data/ext/enclave/mruby/mrblib/symbol.rb +8 -0
- data/ext/enclave/mruby/oss-fuzz/mruby_fuzzer.c +18 -0
- data/ext/enclave/mruby/oss-fuzz/proto_to_ruby.h +55 -0
- data/ext/enclave/mruby/src/allocf.c +37 -0
- data/ext/enclave/mruby/src/array.c +2302 -0
- data/ext/enclave/mruby/src/backtrace.c +294 -0
- data/ext/enclave/mruby/src/cdump.c +498 -0
- data/ext/enclave/mruby/src/class.c +4394 -0
- data/ext/enclave/mruby/src/codedump.c +693 -0
- data/ext/enclave/mruby/src/debug.c +290 -0
- data/ext/enclave/mruby/src/dump.c +998 -0
- data/ext/enclave/mruby/src/enum.c +30 -0
- data/ext/enclave/mruby/src/error.c +937 -0
- data/ext/enclave/mruby/src/etc.c +421 -0
- data/ext/enclave/mruby/src/fmt_fp.c +372 -0
- data/ext/enclave/mruby/src/gc.c +1610 -0
- data/ext/enclave/mruby/src/hash.c +2355 -0
- data/ext/enclave/mruby/src/init.c +50 -0
- data/ext/enclave/mruby/src/kernel.c +718 -0
- data/ext/enclave/mruby/src/load.c +760 -0
- data/ext/enclave/mruby/src/mempool.c +225 -0
- data/ext/enclave/mruby/src/numeric.c +2420 -0
- data/ext/enclave/mruby/src/numops.c +112 -0
- data/ext/enclave/mruby/src/object.c +883 -0
- data/ext/enclave/mruby/src/print.c +136 -0
- data/ext/enclave/mruby/src/proc.c +572 -0
- data/ext/enclave/mruby/src/range.c +597 -0
- data/ext/enclave/mruby/src/readfloat.c +228 -0
- data/ext/enclave/mruby/src/readint.c +27 -0
- data/ext/enclave/mruby/src/readnum.c +43 -0
- data/ext/enclave/mruby/src/state.c +247 -0
- data/ext/enclave/mruby/src/string.c +3577 -0
- data/ext/enclave/mruby/src/symbol.c +1023 -0
- data/ext/enclave/mruby/src/value_array.h +28 -0
- data/ext/enclave/mruby/src/variable.c +1475 -0
- data/ext/enclave/mruby/src/version.c +17 -0
- data/ext/enclave/mruby/src/vm.c +3696 -0
- data/ext/enclave/mruby/tasks/amalgam.rake +34 -0
- data/ext/enclave/mruby/tasks/benchmark.rake +93 -0
- data/ext/enclave/mruby/tasks/bin.rake +23 -0
- data/ext/enclave/mruby/tasks/core.rake +12 -0
- data/ext/enclave/mruby/tasks/doc.rake +118 -0
- data/ext/enclave/mruby/tasks/install.rake +40 -0
- data/ext/enclave/mruby/tasks/libmruby.rake +90 -0
- data/ext/enclave/mruby/tasks/mrbgems.rake +152 -0
- data/ext/enclave/mruby/tasks/mrblib.rake +29 -0
- data/ext/enclave/mruby/tasks/presym.rake +57 -0
- data/ext/enclave/mruby/tasks/test.rake +84 -0
- data/ext/enclave/mruby/tasks/toolchains/android.rake +228 -0
- data/ext/enclave/mruby/tasks/toolchains/clang.rake +8 -0
- data/ext/enclave/mruby/tasks/toolchains/emscripten.rake +57 -0
- data/ext/enclave/mruby/tasks/toolchains/gcc.rake +74 -0
- data/ext/enclave/mruby/tasks/toolchains/openwrt.rake +32 -0
- data/ext/enclave/mruby/tasks/toolchains/visualcpp.rake +48 -0
- data/ext/enclave/mruby/test/assert.rb +404 -0
- data/ext/enclave/mruby/test/bintest.rb +55 -0
- data/ext/enclave/mruby/test/t/argumenterror.rb +37 -0
- data/ext/enclave/mruby/test/t/array.rb +478 -0
- data/ext/enclave/mruby/test/t/basicobject.rb +10 -0
- data/ext/enclave/mruby/test/t/bs_block.rb +621 -0
- data/ext/enclave/mruby/test/t/bs_literal.rb +38 -0
- data/ext/enclave/mruby/test/t/class.rb +505 -0
- data/ext/enclave/mruby/test/t/codegen.rb +196 -0
- data/ext/enclave/mruby/test/t/comparable.rb +79 -0
- data/ext/enclave/mruby/test/t/ensure.rb +36 -0
- data/ext/enclave/mruby/test/t/enumerable.rb +134 -0
- data/ext/enclave/mruby/test/t/exception.rb +425 -0
- data/ext/enclave/mruby/test/t/false.rb +31 -0
- data/ext/enclave/mruby/test/t/float.rb +296 -0
- data/ext/enclave/mruby/test/t/gc.rb +45 -0
- data/ext/enclave/mruby/test/t/hash.rb +976 -0
- data/ext/enclave/mruby/test/t/indexerror.rb +6 -0
- data/ext/enclave/mruby/test/t/integer.rb +247 -0
- data/ext/enclave/mruby/test/t/iterations.rb +61 -0
- data/ext/enclave/mruby/test/t/kernel.rb +462 -0
- data/ext/enclave/mruby/test/t/lang.rb +74 -0
- data/ext/enclave/mruby/test/t/literals.rb +386 -0
- data/ext/enclave/mruby/test/t/localjumperror.rb +13 -0
- data/ext/enclave/mruby/test/t/methods.rb +138 -0
- data/ext/enclave/mruby/test/t/module.rb +931 -0
- data/ext/enclave/mruby/test/t/nameerror.rb +28 -0
- data/ext/enclave/mruby/test/t/nil.rb +39 -0
- data/ext/enclave/mruby/test/t/nomethoderror.rb +22 -0
- data/ext/enclave/mruby/test/t/numeric.rb +114 -0
- data/ext/enclave/mruby/test/t/object.rb +10 -0
- data/ext/enclave/mruby/test/t/proc.rb +198 -0
- data/ext/enclave/mruby/test/t/range.rb +194 -0
- data/ext/enclave/mruby/test/t/rangeerror.rb +6 -0
- data/ext/enclave/mruby/test/t/regexperror.rb +4 -0
- data/ext/enclave/mruby/test/t/runtimeerror.rb +6 -0
- data/ext/enclave/mruby/test/t/standarderror.rb +6 -0
- data/ext/enclave/mruby/test/t/string.rb +981 -0
- data/ext/enclave/mruby/test/t/superclass.rb +46 -0
- data/ext/enclave/mruby/test/t/symbol.rb +30 -0
- data/ext/enclave/mruby/test/t/syntax.rb +1296 -0
- data/ext/enclave/mruby/test/t/true.rb +31 -0
- data/ext/enclave/mruby/test/t/typeerror.rb +6 -0
- data/ext/enclave/mruby/test/t/unicode.rb +39 -0
- data/ext/enclave/mruby/test/t/vformat.rb +57 -0
- data/ext/enclave/mruby/tools/lrama/LEGAL.md +12 -0
- data/ext/enclave/mruby/tools/lrama/MIT +21 -0
- data/ext/enclave/mruby/tools/lrama/NEWS.md +696 -0
- data/ext/enclave/mruby/tools/lrama/exe/lrama +7 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/bitmap.rb +34 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/command.rb +68 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/context.rb +499 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/derivation.rb +66 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/example.rb +129 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/path.rb +29 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/production_path.rb +19 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/start_path.rb +23 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/state_item.rb +8 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/transition_path.rb +19 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/triple.rb +23 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples.rb +298 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/diagnostics.rb +36 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/digraph.rb +83 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/auxiliary.rb +9 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/binding.rb +67 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/destructor_code.rb +42 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/initial_action_code.rb +36 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/no_reference_code.rb +30 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/printer_code.rb +42 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/rule_action.rb +92 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code.rb +53 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/counter.rb +17 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/destructor.rb +11 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/error_token.rb +11 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb +62 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb +40 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb +24 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule.rb +5 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/percent_code.rb +14 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/precedence.rb +13 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/printer.rb +11 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/reference.rb +16 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/rule.rb +75 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/rule_builder.rb +255 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/stdlib.y +122 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/symbol.rb +105 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/symbols/resolver.rb +301 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/symbols.rb +3 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/type.rb +20 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/union.rb +12 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar.rb +407 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar_validator.rb +37 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/grammar_file.rb +40 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/location.rb +115 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/char.rb +11 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/ident.rb +11 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/instantiate_rule.rb +30 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/tag.rb +16 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/user_code.rb +83 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token.rb +70 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer.rb +191 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/logger.rb +21 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/option_parser.rb +169 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/options.rb +28 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/output.rb +459 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/parser.rb +2144 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/report/duration.rb +27 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/report/profile.rb +16 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/report.rb +4 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/state/reduce.rb +37 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/state/reduce_reduce_conflict.rb +11 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/state/resolved_conflict.rb +31 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/state/shift.rb +15 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/state/shift_reduce_conflict.rb +11 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/state.rb +433 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/states/item.rb +91 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/states.rb +595 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/states_reporter.rb +362 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/trace_reporter.rb +45 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama/version.rb +5 -0
- data/ext/enclave/mruby/tools/lrama/lib/lrama.rb +22 -0
- data/ext/enclave/mruby/tools/lrama/template/bison/_yacc.h +71 -0
- data/ext/enclave/mruby/tools/lrama/template/bison/yacc.c +2068 -0
- data/ext/enclave/mruby/tools/lrama/template/bison/yacc.h +40 -0
- data/ext/enclave/sandbox_build_config.rb +15 -0
- data/ext/enclave/sandbox_core.c +722 -0
- data/ext/enclave/sandbox_core.h +87 -0
- data/lib/enclave/result.rb +29 -0
- data/lib/enclave/tool.rb +38 -0
- data/lib/enclave/version.rb +3 -0
- data/lib/enclave.rb +73 -0
- metadata +819 -0
|
@@ -0,0 +1,883 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** object.c - Object, NilClass, TrueClass, FalseClass class
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#include <mruby.h>
|
|
8
|
+
#include <mruby/class.h>
|
|
9
|
+
#include <mruby/numeric.h>
|
|
10
|
+
#include <mruby/string.h>
|
|
11
|
+
#include <mruby/class.h>
|
|
12
|
+
#include <mruby/internal.h>
|
|
13
|
+
#include <mruby/presym.h>
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* Checks if two mruby values, `v1` and `v2`, are identical.
|
|
17
|
+
* For most types, this is equivalent to pointer equality.
|
|
18
|
+
* For immediate values (integers, symbols, true, false, nil),
|
|
19
|
+
* it compares their actual values.
|
|
20
|
+
*
|
|
21
|
+
* Behavior under different boxing configurations:
|
|
22
|
+
* - MRB_NAN_BOXING: Compares the raw `uint64_t` values.
|
|
23
|
+
* - MRB_WORD_BOXING: Compares the raw `mrb_word` values.
|
|
24
|
+
* - MRB_NO_BOXING: Checks if types are equal. If so, performs
|
|
25
|
+
* type-specific comparisons (value for immediates, pointer for others).
|
|
26
|
+
*/
|
|
27
|
+
MRB_API mrb_bool
|
|
28
|
+
mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2)
|
|
29
|
+
{
|
|
30
|
+
#if defined(MRB_NAN_BOXING)
|
|
31
|
+
return v1.u == v2.u;
|
|
32
|
+
#elif defined(MRB_WORD_BOXING)
|
|
33
|
+
return v1.w == v2.w;
|
|
34
|
+
#else /* MRB_NO_BOXING */
|
|
35
|
+
if (mrb_type(v1) != mrb_type(v2)) return FALSE;
|
|
36
|
+
switch (mrb_type(v1)) {
|
|
37
|
+
case MRB_TT_TRUE:
|
|
38
|
+
return TRUE;
|
|
39
|
+
|
|
40
|
+
case MRB_TT_FALSE:
|
|
41
|
+
return (mrb_fixnum(v1) == mrb_fixnum(v2));
|
|
42
|
+
case MRB_TT_INTEGER:
|
|
43
|
+
return (mrb_integer(v1) == mrb_integer(v2));
|
|
44
|
+
case MRB_TT_SYMBOL:
|
|
45
|
+
return (mrb_symbol(v1) == mrb_symbol(v2));
|
|
46
|
+
|
|
47
|
+
#ifndef MRB_NO_FLOAT
|
|
48
|
+
case MRB_TT_FLOAT:
|
|
49
|
+
return (mrb_float(v1) == mrb_float(v2));
|
|
50
|
+
#endif
|
|
51
|
+
|
|
52
|
+
default:
|
|
53
|
+
return (mrb_ptr(v1) == mrb_ptr(v2));
|
|
54
|
+
}
|
|
55
|
+
#endif
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/*
|
|
59
|
+
* Checks if two mruby values, `v1` and `v2`, are equal.
|
|
60
|
+
* This function currently calls mrb_obj_eq to perform the comparison.
|
|
61
|
+
*/
|
|
62
|
+
MRB_API mrb_bool
|
|
63
|
+
mrb_obj_equal(mrb_state *mrb, mrb_value v1, mrb_value v2)
|
|
64
|
+
{
|
|
65
|
+
return mrb_obj_eq(mrb, v1, v2);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* Checks for equality between `obj1` and `obj2`.
|
|
70
|
+
*
|
|
71
|
+
* It first uses `mrb_obj_eq` for an identity check. If that fails,
|
|
72
|
+
* it handles cases like mixed integer/float comparisons.
|
|
73
|
+
* If `MRB_USE_BIGINT` is defined, it also considers comparisons
|
|
74
|
+
* involving BigInts against Integers, other BigInts, or Floats.
|
|
75
|
+
* Finally, if none of the above apply, it attempts to call the
|
|
76
|
+
* `==` operator (MRB_OPSYM(eq)) on `obj1` with `obj2` as an argument,
|
|
77
|
+
* unless `obj1`'s `==` method is the default `mrb_obj_equal_m`.
|
|
78
|
+
*/
|
|
79
|
+
MRB_API mrb_bool
|
|
80
|
+
mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
|
|
81
|
+
{
|
|
82
|
+
if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
|
|
83
|
+
#ifndef MRB_NO_FLOAT
|
|
84
|
+
/* value mixing with integer and float */
|
|
85
|
+
else if (mrb_integer_p(obj1) && mrb_float_p(obj2)) {
|
|
86
|
+
if ((mrb_float)mrb_integer(obj1) == mrb_float(obj2))
|
|
87
|
+
return TRUE;
|
|
88
|
+
}
|
|
89
|
+
else if (mrb_float_p(obj1) && mrb_integer_p(obj2)) {
|
|
90
|
+
if (mrb_float(obj1) == (mrb_float)mrb_integer(obj2))
|
|
91
|
+
return TRUE;
|
|
92
|
+
}
|
|
93
|
+
#endif
|
|
94
|
+
#ifdef MRB_USE_BIGINT
|
|
95
|
+
else if (mrb_bigint_p(obj1) &&
|
|
96
|
+
(mrb_integer_p(obj2) || mrb_bigint_p(obj2) || mrb_float_p(obj2))) {
|
|
97
|
+
if (mrb_bint_cmp(mrb, obj1, obj2) == 0)
|
|
98
|
+
return TRUE;
|
|
99
|
+
}
|
|
100
|
+
#endif
|
|
101
|
+
else if (!mrb_func_basic_p(mrb, obj1, MRB_OPSYM(eq), mrb_obj_equal_m)) {
|
|
102
|
+
mrb_value result = mrb_funcall_argv(mrb, obj1, MRB_OPSYM(eq), 1, &obj2);
|
|
103
|
+
if (mrb_test(result)) return TRUE;
|
|
104
|
+
}
|
|
105
|
+
return FALSE;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/*
|
|
109
|
+
* Document-class: NilClass
|
|
110
|
+
*
|
|
111
|
+
* The class of the singleton object `nil`.
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
/* 15.2.4.3.4 */
|
|
115
|
+
/*
|
|
116
|
+
* call_seq:
|
|
117
|
+
* nil.nil? -> true
|
|
118
|
+
*
|
|
119
|
+
* Only the object *nil* responds `true` to `nil?`.
|
|
120
|
+
*/
|
|
121
|
+
|
|
122
|
+
static mrb_value
|
|
123
|
+
mrb_true(mrb_state *mrb, mrb_value obj)
|
|
124
|
+
{
|
|
125
|
+
return mrb_true_value();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* 15.2.4.3.5 */
|
|
129
|
+
/*
|
|
130
|
+
* call-seq:
|
|
131
|
+
* nil.to_s -> ""
|
|
132
|
+
*
|
|
133
|
+
* Always returns the empty string.
|
|
134
|
+
*/
|
|
135
|
+
|
|
136
|
+
static mrb_value
|
|
137
|
+
nil_to_s(mrb_state *mrb, mrb_value obj)
|
|
138
|
+
{
|
|
139
|
+
mrb_value str = mrb_str_new_frozen(mrb, NULL, 0);
|
|
140
|
+
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
141
|
+
return str;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
static mrb_value
|
|
145
|
+
nil_inspect(mrb_state *mrb, mrb_value obj)
|
|
146
|
+
{
|
|
147
|
+
mrb_value str = mrb_str_new_lit_frozen(mrb, "nil");
|
|
148
|
+
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
149
|
+
return str;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/***********************************************************************
|
|
153
|
+
* Document-class: TrueClass
|
|
154
|
+
*
|
|
155
|
+
* The global value `true` is the only instance of class
|
|
156
|
+
* `TrueClass` and represents a logically true value in
|
|
157
|
+
* boolean expressions. The class provides operators allowing
|
|
158
|
+
* `true` to be used in logical expressions.
|
|
159
|
+
*/
|
|
160
|
+
|
|
161
|
+
/* 15.2.5.3.1 */
|
|
162
|
+
/*
|
|
163
|
+
* call-seq:
|
|
164
|
+
* true & obj -> true or false
|
|
165
|
+
*
|
|
166
|
+
* And---Returns `false` if *obj* is
|
|
167
|
+
* `nil` or `false`, `true` otherwise.
|
|
168
|
+
*/
|
|
169
|
+
|
|
170
|
+
static mrb_value
|
|
171
|
+
true_and(mrb_state *mrb, mrb_value obj)
|
|
172
|
+
{
|
|
173
|
+
mrb_bool obj2;
|
|
174
|
+
|
|
175
|
+
mrb_get_args(mrb, "b", &obj2);
|
|
176
|
+
|
|
177
|
+
return mrb_bool_value(obj2);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* 15.2.5.3.2 */
|
|
181
|
+
/*
|
|
182
|
+
* call-seq:
|
|
183
|
+
* true ^ obj -> !obj
|
|
184
|
+
*
|
|
185
|
+
* Exclusive Or---Returns `true` if *obj* is
|
|
186
|
+
* `nil` or `false`, `false`
|
|
187
|
+
* otherwise.
|
|
188
|
+
*/
|
|
189
|
+
|
|
190
|
+
static mrb_value
|
|
191
|
+
true_xor(mrb_state *mrb, mrb_value obj)
|
|
192
|
+
{
|
|
193
|
+
mrb_bool obj2;
|
|
194
|
+
|
|
195
|
+
mrb_get_args(mrb, "b", &obj2);
|
|
196
|
+
return mrb_bool_value(!obj2);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* 15.2.5.3.3 */
|
|
200
|
+
/*
|
|
201
|
+
* call-seq:
|
|
202
|
+
* true.to_s -> "true"
|
|
203
|
+
*
|
|
204
|
+
* The string representation of `true` is "true".
|
|
205
|
+
*/
|
|
206
|
+
|
|
207
|
+
static mrb_value
|
|
208
|
+
true_to_s(mrb_state *mrb, mrb_value obj)
|
|
209
|
+
{
|
|
210
|
+
mrb_value str = mrb_str_new_lit_frozen(mrb, "true");
|
|
211
|
+
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
212
|
+
return str;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* 15.2.5.3.4 */
|
|
216
|
+
/*
|
|
217
|
+
* call-seq:
|
|
218
|
+
* true | obj -> true
|
|
219
|
+
*
|
|
220
|
+
* Or---Returns `true`. As *anObject* is an argument to
|
|
221
|
+
* a method call, it is always evaluated; there is no short-circuit
|
|
222
|
+
* evaluation in this case.
|
|
223
|
+
*
|
|
224
|
+
* true | puts("or")
|
|
225
|
+
* true || puts("logical or")
|
|
226
|
+
*
|
|
227
|
+
* <em>produces:</em>
|
|
228
|
+
*
|
|
229
|
+
* or
|
|
230
|
+
*/
|
|
231
|
+
|
|
232
|
+
static mrb_value
|
|
233
|
+
true_or(mrb_state *mrb, mrb_value obj)
|
|
234
|
+
{
|
|
235
|
+
return mrb_true_value();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/*
|
|
239
|
+
* Document-class: FalseClass
|
|
240
|
+
*
|
|
241
|
+
* The global value `false` is the only instance of class
|
|
242
|
+
* `FalseClass` and represents a logically false value in
|
|
243
|
+
* boolean expressions. The class provides operators allowing
|
|
244
|
+
* `false` to participate correctly in logical expressions.
|
|
245
|
+
*
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
/* 15.2.4.3.1 */
|
|
249
|
+
/* 15.2.6.3.1 */
|
|
250
|
+
/*
|
|
251
|
+
* call-seq:
|
|
252
|
+
* false & obj -> false
|
|
253
|
+
* nil & obj -> false
|
|
254
|
+
*
|
|
255
|
+
* And---Returns `false`. *obj* is always
|
|
256
|
+
* evaluated as it is the argument to a method call---there is no
|
|
257
|
+
* short-circuit evaluation in this case.
|
|
258
|
+
*/
|
|
259
|
+
|
|
260
|
+
static mrb_value
|
|
261
|
+
false_and(mrb_state *mrb, mrb_value obj)
|
|
262
|
+
{
|
|
263
|
+
return mrb_false_value();
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/* 15.2.4.3.2 */
|
|
267
|
+
/* 15.2.6.3.2 */
|
|
268
|
+
/*
|
|
269
|
+
* call-seq:
|
|
270
|
+
* false ^ obj -> true or false
|
|
271
|
+
* nil ^ obj -> true or false
|
|
272
|
+
*
|
|
273
|
+
* Exclusive Or---If *obj* is `nil` or
|
|
274
|
+
* `false`, returns `false`; otherwise, returns
|
|
275
|
+
* `true`.
|
|
276
|
+
*
|
|
277
|
+
*/
|
|
278
|
+
|
|
279
|
+
static mrb_value
|
|
280
|
+
false_xor(mrb_state *mrb, mrb_value obj)
|
|
281
|
+
{
|
|
282
|
+
mrb_bool obj2;
|
|
283
|
+
|
|
284
|
+
mrb_get_args(mrb, "b", &obj2);
|
|
285
|
+
return mrb_bool_value(obj2);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/* 15.2.4.3.3 */
|
|
289
|
+
/* 15.2.6.3.4 */
|
|
290
|
+
/*
|
|
291
|
+
* call-seq:
|
|
292
|
+
* false | obj -> true or false
|
|
293
|
+
* nil | obj -> true or false
|
|
294
|
+
*
|
|
295
|
+
* Or---Returns `false` if *obj* is
|
|
296
|
+
* `nil` or `false`; `true` otherwise.
|
|
297
|
+
*/
|
|
298
|
+
|
|
299
|
+
static mrb_value
|
|
300
|
+
false_or(mrb_state *mrb, mrb_value obj)
|
|
301
|
+
{
|
|
302
|
+
mrb_bool obj2;
|
|
303
|
+
|
|
304
|
+
mrb_get_args(mrb, "b", &obj2);
|
|
305
|
+
return mrb_bool_value(obj2);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/* 15.2.6.3.3 */
|
|
309
|
+
/*
|
|
310
|
+
* call-seq:
|
|
311
|
+
* false.to_s -> "false"
|
|
312
|
+
*
|
|
313
|
+
* 'nuf said...
|
|
314
|
+
*/
|
|
315
|
+
|
|
316
|
+
static mrb_value
|
|
317
|
+
false_to_s(mrb_state *mrb, mrb_value obj)
|
|
318
|
+
{
|
|
319
|
+
mrb_value str = mrb_str_new_lit_frozen(mrb, "false");
|
|
320
|
+
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
321
|
+
return str;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* ---------------------------*/
|
|
325
|
+
static const mrb_mt_entry nil_rom_entries[] = {
|
|
326
|
+
MRB_MT_ENTRY(false_and, MRB_OPSYM(and), MRB_ARGS_REQ(1)), /* 15.2.4.3.1 */
|
|
327
|
+
MRB_MT_ENTRY(false_or, MRB_OPSYM(or), MRB_ARGS_REQ(1)), /* 15.2.4.3.2 */
|
|
328
|
+
MRB_MT_ENTRY(false_xor, MRB_OPSYM(xor), MRB_ARGS_REQ(1)), /* 15.2.4.3.3 */
|
|
329
|
+
MRB_MT_ENTRY(mrb_true, MRB_SYM_Q(nil), MRB_ARGS_NONE()), /* 15.2.4.3.4 */
|
|
330
|
+
MRB_MT_ENTRY(nil_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.4.3.5 */
|
|
331
|
+
MRB_MT_ENTRY(nil_inspect, MRB_SYM(inspect), MRB_ARGS_NONE()),
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
static const mrb_mt_entry true_rom_entries[] = {
|
|
335
|
+
MRB_MT_ENTRY(true_and, MRB_OPSYM(and), MRB_ARGS_REQ(1)), /* 15.2.5.3.1 */
|
|
336
|
+
MRB_MT_ENTRY(true_or, MRB_OPSYM(or), MRB_ARGS_REQ(1)), /* 15.2.5.3.2 */
|
|
337
|
+
MRB_MT_ENTRY(true_xor, MRB_OPSYM(xor), MRB_ARGS_REQ(1)), /* 15.2.5.3.3 */
|
|
338
|
+
MRB_MT_ENTRY(true_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.5.3.4 */
|
|
339
|
+
MRB_MT_ENTRY(true_to_s, MRB_SYM(inspect), MRB_ARGS_NONE()),
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
static const mrb_mt_entry false_rom_entries[] = {
|
|
343
|
+
MRB_MT_ENTRY(false_and, MRB_OPSYM(and), MRB_ARGS_REQ(1)), /* 15.2.4.3.1 */
|
|
344
|
+
MRB_MT_ENTRY(false_or, MRB_OPSYM(or), MRB_ARGS_REQ(1)), /* 15.2.4.3.2 */
|
|
345
|
+
MRB_MT_ENTRY(false_xor, MRB_OPSYM(xor), MRB_ARGS_REQ(1)), /* 15.2.4.3.3 */
|
|
346
|
+
MRB_MT_ENTRY(false_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.6.3.4 */
|
|
347
|
+
MRB_MT_ENTRY(false_to_s, MRB_SYM(inspect), MRB_ARGS_NONE()),
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
void
|
|
351
|
+
mrb_init_object(mrb_state *mrb)
|
|
352
|
+
{
|
|
353
|
+
struct RClass *n;
|
|
354
|
+
struct RClass *t;
|
|
355
|
+
struct RClass *f;
|
|
356
|
+
|
|
357
|
+
mrb->nil_class = n = mrb_define_class_id(mrb, MRB_SYM(NilClass), mrb->object_class);
|
|
358
|
+
MRB_SET_INSTANCE_TT(n, MRB_TT_FALSE);
|
|
359
|
+
mrb_undef_class_method_id(mrb, n, MRB_SYM(new));
|
|
360
|
+
MRB_MT_INIT_ROM(mrb, n, nil_rom_entries);
|
|
361
|
+
|
|
362
|
+
mrb->true_class = t = mrb_define_class_id(mrb, MRB_SYM(TrueClass), mrb->object_class);
|
|
363
|
+
MRB_SET_INSTANCE_TT(t, MRB_TT_TRUE);
|
|
364
|
+
mrb_undef_class_method_id(mrb, t, MRB_SYM(new));
|
|
365
|
+
MRB_MT_INIT_ROM(mrb, t, true_rom_entries);
|
|
366
|
+
|
|
367
|
+
mrb->false_class = f = mrb_define_class_id(mrb, MRB_SYM(FalseClass), mrb->object_class);
|
|
368
|
+
MRB_SET_INSTANCE_TT(f, MRB_TT_FALSE);
|
|
369
|
+
mrb_undef_class_method_id(mrb, f, MRB_SYM(new));
|
|
370
|
+
MRB_MT_INIT_ROM(mrb, f, false_rom_entries);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
static const char*
|
|
374
|
+
type_name(enum mrb_vtype t)
|
|
375
|
+
{
|
|
376
|
+
switch (t) {
|
|
377
|
+
#define MRB_VTYPE_NAME(tt, type, name) case tt: return name;
|
|
378
|
+
MRB_VTYPE_FOREACH(MRB_VTYPE_NAME)
|
|
379
|
+
#undef MRB_VTYPE_NAME
|
|
380
|
+
default: return NULL;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
static mrb_value
|
|
385
|
+
convert_type(mrb_state *mrb, mrb_value val, const char *tname, mrb_sym method, mrb_bool raise)
|
|
386
|
+
{
|
|
387
|
+
if (!mrb_respond_to(mrb, val, method)) {
|
|
388
|
+
if (raise) {
|
|
389
|
+
if (tname) mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y into %s", val, tname);
|
|
390
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y", val);
|
|
391
|
+
}
|
|
392
|
+
return mrb_nil_value();
|
|
393
|
+
}
|
|
394
|
+
return mrb_funcall_argv(mrb, val, method, 0, 0);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/*
|
|
398
|
+
* Attempts to convert the mruby value `val` to the specified `type`
|
|
399
|
+
* by calling the given `method` (a symbol) on `val`.
|
|
400
|
+
*
|
|
401
|
+
* It first checks if `val` is already of the target `type`. If not, it
|
|
402
|
+
* proceeds to call the conversion `method` on `val`.
|
|
403
|
+
*
|
|
404
|
+
* If the conversion method does not return a value of the target `type`,
|
|
405
|
+
* a `TypeError` is raised. However, as a special case, if the target
|
|
406
|
+
* `type` is `MRB_TT_STRING`, and the initial conversion fails to produce
|
|
407
|
+
* a string, this function will then attempt to call `mrb_any_to_s` on
|
|
408
|
+
* the original `val` as a fallback mechanism.
|
|
409
|
+
*
|
|
410
|
+
* Returns the converted value if successful.
|
|
411
|
+
*/
|
|
412
|
+
MRB_API mrb_value
|
|
413
|
+
mrb_type_convert(mrb_state *mrb, mrb_value val, enum mrb_vtype type, mrb_sym method)
|
|
414
|
+
{
|
|
415
|
+
if (mrb_type(val) == type) return val;
|
|
416
|
+
|
|
417
|
+
const char *tname = type_name(type);
|
|
418
|
+
mrb_value v = convert_type(mrb, val, tname, method, TRUE);
|
|
419
|
+
if (mrb_type(v) != type) {
|
|
420
|
+
if (type == MRB_TT_STRING) return mrb_any_to_s(mrb, val);
|
|
421
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%v cannot be converted to %s by #%n", val, tname, method);
|
|
422
|
+
}
|
|
423
|
+
return v;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/*
|
|
427
|
+
* Attempts to convert the mruby value `val` to the specified `type`
|
|
428
|
+
* by calling the given `method` (a symbol) on `val`.
|
|
429
|
+
*
|
|
430
|
+
* This function first checks if `val` is already of the target `type`.
|
|
431
|
+
* An exception to this initial check is if the target `type` is
|
|
432
|
+
* `MRB_TT_CDATA` or `MRB_TT_ISTRUCT`; in these cases, the conversion
|
|
433
|
+
* attempt proceeds regardless of `val`'s current type.
|
|
434
|
+
*
|
|
435
|
+
* If `val` is not already of the target `type` (or if it's `MRB_TT_CDATA`
|
|
436
|
+
* or `MRB_TT_ISTRUCT`), the specified `method` is called on `val` to
|
|
437
|
+
* perform the conversion. Unlike `mrb_type_convert`, this function
|
|
438
|
+
* does *not* raise an error if the conversion fails or if the returned
|
|
439
|
+
* value is not of the target `type`.
|
|
440
|
+
*
|
|
441
|
+
* Returns the converted value if the conversion was successful and the
|
|
442
|
+
* resulting value is of the target `type`. Otherwise, it returns
|
|
443
|
+
* `mrb_nil_value()`.
|
|
444
|
+
*/
|
|
445
|
+
MRB_API mrb_value
|
|
446
|
+
mrb_type_convert_check(mrb_state *mrb, mrb_value val, enum mrb_vtype type, mrb_sym method)
|
|
447
|
+
{
|
|
448
|
+
if (mrb_type(val) == type && type != MRB_TT_CDATA && type != MRB_TT_ISTRUCT) return val;
|
|
449
|
+
mrb_value v = convert_type(mrb, val, type_name(type), method, FALSE);
|
|
450
|
+
if (mrb_nil_p(v) || mrb_type(v) != type) return mrb_nil_value();
|
|
451
|
+
return v;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/*
|
|
455
|
+
* Checks if the mruby value `x` is of the specified type `t`.
|
|
456
|
+
*
|
|
457
|
+
* If the type of `x` does not match `t`, this function raises
|
|
458
|
+
* a `TypeError`. The error message provides details about the
|
|
459
|
+
* actual type of `x` and the expected type `t`.
|
|
460
|
+
*/
|
|
461
|
+
MRB_API void
|
|
462
|
+
mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t)
|
|
463
|
+
{
|
|
464
|
+
enum mrb_vtype xt = mrb_type(x);
|
|
465
|
+
const char *tname, *ename;
|
|
466
|
+
|
|
467
|
+
if (t == xt) return;
|
|
468
|
+
|
|
469
|
+
tname = type_name(t);
|
|
470
|
+
if (mrb_nil_p(x)) {
|
|
471
|
+
ename = "nil";
|
|
472
|
+
}
|
|
473
|
+
else if (mrb_integer_p(x)) {
|
|
474
|
+
ename = "Integer";
|
|
475
|
+
}
|
|
476
|
+
else if (mrb_symbol_p(x)) {
|
|
477
|
+
ename = "Symbol";
|
|
478
|
+
}
|
|
479
|
+
else if (mrb_immediate_p(x)) {
|
|
480
|
+
ename = RSTRING_PTR(mrb_obj_as_string(mrb, x));
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
ename = mrb_obj_classname(mrb, x);
|
|
484
|
+
}
|
|
485
|
+
if (tname) {
|
|
486
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s)",
|
|
487
|
+
ename, tname);
|
|
488
|
+
}
|
|
489
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "unknown type %d (%s given)", t, ename);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/* 15.3.1.3.46 */
|
|
493
|
+
/*
|
|
494
|
+
* call-seq:
|
|
495
|
+
* obj.to_s => string
|
|
496
|
+
*
|
|
497
|
+
* Returns a string representing *obj*. The default
|
|
498
|
+
* `to_s` prints the object's class and an encoding of the
|
|
499
|
+
* object id. As a special case, the top-level object that is the
|
|
500
|
+
* initial execution context of Ruby programs returns "main."
|
|
501
|
+
*/
|
|
502
|
+
|
|
503
|
+
MRB_API mrb_value
|
|
504
|
+
mrb_any_to_s(mrb_state *mrb, mrb_value obj)
|
|
505
|
+
{
|
|
506
|
+
mrb_value str = mrb_str_new_capa(mrb, 20);
|
|
507
|
+
const char *cname = mrb_obj_classname(mrb, obj);
|
|
508
|
+
|
|
509
|
+
mrb_str_cat_lit(mrb, str, "#<");
|
|
510
|
+
mrb_str_cat_cstr(mrb, str, cname);
|
|
511
|
+
if (!mrb_immediate_p(obj)) {
|
|
512
|
+
mrb_str_cat_lit(mrb, str, ":");
|
|
513
|
+
mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_ptr(obj)));
|
|
514
|
+
}
|
|
515
|
+
mrb_str_cat_lit(mrb, str, ">");
|
|
516
|
+
|
|
517
|
+
return str;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/*
|
|
521
|
+
* call-seq:
|
|
522
|
+
* obj.is_a?(class) => true or false
|
|
523
|
+
* obj.kind_of?(class) => true or false
|
|
524
|
+
*
|
|
525
|
+
* Checks if the mruby object `obj` is an instance of class `c`,
|
|
526
|
+
* or an instance of a class that inherits from `c`, or an instance
|
|
527
|
+
* of a class that includes `c` if `c` is a module.
|
|
528
|
+
*
|
|
529
|
+
* This function traverses the class hierarchy of `obj` upwards.
|
|
530
|
+
* It returns `TRUE` if `c` is found in the ancestry. Otherwise,
|
|
531
|
+
* it returns `FALSE`.
|
|
532
|
+
*
|
|
533
|
+
* If `c` is not a class or module, a `TypeError` is raised.
|
|
534
|
+
*
|
|
535
|
+
* module M; end
|
|
536
|
+
* class A
|
|
537
|
+
* include M
|
|
538
|
+
* end
|
|
539
|
+
* class B < A; end
|
|
540
|
+
* class C < B; end
|
|
541
|
+
* b = B.new
|
|
542
|
+
* b.instance_of? A #=> false (mrb_obj_is_instance_of)
|
|
543
|
+
* b.instance_of? B #=> true (mrb_obj_is_instance_of)
|
|
544
|
+
* b.kind_of? A #=> true
|
|
545
|
+
* b.kind_of? B #=> true
|
|
546
|
+
* b.kind_of? C #=> false
|
|
547
|
+
* b.kind_of? M #=> true
|
|
548
|
+
*/
|
|
549
|
+
MRB_API mrb_bool
|
|
550
|
+
mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c)
|
|
551
|
+
{
|
|
552
|
+
struct RClass *cl = mrb_class(mrb, obj);
|
|
553
|
+
|
|
554
|
+
switch (c->tt) {
|
|
555
|
+
case MRB_TT_MODULE:
|
|
556
|
+
case MRB_TT_CLASS:
|
|
557
|
+
case MRB_TT_ICLASS:
|
|
558
|
+
case MRB_TT_SCLASS:
|
|
559
|
+
break;
|
|
560
|
+
|
|
561
|
+
default:
|
|
562
|
+
mrb_raise(mrb, E_TYPE_ERROR, "class or module required");
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
MRB_CLASS_ORIGIN(c);
|
|
566
|
+
while (cl) {
|
|
567
|
+
if (cl == c || cl->mt == c->mt)
|
|
568
|
+
return TRUE;
|
|
569
|
+
cl = cl->super;
|
|
570
|
+
}
|
|
571
|
+
return FALSE;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
#ifdef MRB_USE_RATIONAL
|
|
575
|
+
// provided by mruby-rational with MRB_USE_RATIONAL
|
|
576
|
+
mrb_value mrb_rational_to_i(mrb_state *mrb, mrb_value rat);
|
|
577
|
+
mrb_value mrb_rational_to_f(mrb_state *mrb, mrb_value rat);
|
|
578
|
+
#endif
|
|
579
|
+
#ifdef MRB_USE_COMPLEX
|
|
580
|
+
// provided by mruby-complex with MRB_USE_COMPLEX
|
|
581
|
+
mrb_value mrb_complex_to_f(mrb_state *mrb, mrb_value comp);
|
|
582
|
+
mrb_value mrb_complex_to_i(mrb_state *mrb, mrb_value comp);
|
|
583
|
+
#endif
|
|
584
|
+
|
|
585
|
+
/*
|
|
586
|
+
* Ensures that the given mruby value `val` is an Integer.
|
|
587
|
+
*
|
|
588
|
+
* If `val` is already an `MRB_TT_INTEGER`, it is returned directly.
|
|
589
|
+
*
|
|
590
|
+
* If `val` is an `MRB_TT_FLOAT` (and `MRB_NO_FLOAT` is not defined),
|
|
591
|
+
* it is converted to an integer using `mrb_float_to_integer`.
|
|
592
|
+
*
|
|
593
|
+
* The function also handles conversions from other numeric types if
|
|
594
|
+
* the respective modules are enabled:
|
|
595
|
+
* - `MRB_TT_BIGINT` (if `MRB_USE_BIGINT` is defined): `val` is returned as is,
|
|
596
|
+
* as BigInts are considered integers.
|
|
597
|
+
* - `MRB_TT_RATIONAL` (if `MRB_USE_RATIONAL` is defined): Converted using
|
|
598
|
+
* `mrb_rational_to_i`.
|
|
599
|
+
* - `MRB_TT_COMPLEX` (if `MRB_USE_COMPLEX` is defined): Converted using
|
|
600
|
+
* `mrb_complex_to_i` (typically if the imaginary part is zero).
|
|
601
|
+
*
|
|
602
|
+
* If `val` cannot be converted to an Integer (e.g., it's a String or Array,
|
|
603
|
+
* or a Complex with a non-zero imaginary part), a `TypeError` is raised.
|
|
604
|
+
*
|
|
605
|
+
* Returns the (potentially converted) integer value.
|
|
606
|
+
*/
|
|
607
|
+
MRB_API mrb_value
|
|
608
|
+
mrb_ensure_integer_type(mrb_state *mrb, mrb_value val)
|
|
609
|
+
{
|
|
610
|
+
if (!mrb_integer_p(val)) {
|
|
611
|
+
#ifndef MRB_NO_FLOAT
|
|
612
|
+
if (mrb_float_p(val)) {
|
|
613
|
+
return mrb_float_to_integer(mrb, val);
|
|
614
|
+
}
|
|
615
|
+
else {
|
|
616
|
+
switch (mrb_type(val)) {
|
|
617
|
+
#ifdef MRB_USE_BIGINT
|
|
618
|
+
case MRB_TT_BIGINT:
|
|
619
|
+
return val;
|
|
620
|
+
#endif
|
|
621
|
+
#ifdef MRB_USE_RATIONAL
|
|
622
|
+
case MRB_TT_RATIONAL:
|
|
623
|
+
return mrb_rational_to_i(mrb, val);
|
|
624
|
+
#endif
|
|
625
|
+
#ifdef MRB_USE_COMPLEX
|
|
626
|
+
case MRB_TT_COMPLEX:
|
|
627
|
+
return mrb_complex_to_i(mrb, val);
|
|
628
|
+
#endif
|
|
629
|
+
default:
|
|
630
|
+
break;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
#endif
|
|
634
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Integer", val);
|
|
635
|
+
}
|
|
636
|
+
return val;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/*
|
|
640
|
+
* Ensures that the given mruby value `val` is a C `mrb_int` (fixed-size integer).
|
|
641
|
+
*
|
|
642
|
+
* This function first calls `mrb_ensure_integer_type` to convert `val`
|
|
643
|
+
* to a generic mruby Integer if it's not already. This step might result
|
|
644
|
+
* in `val` being a Fixnum or a BigInt (if `MRB_USE_BIGINT` is enabled).
|
|
645
|
+
*
|
|
646
|
+
* If `mrb_ensure_integer_type` returns a BigInt (and `MRB_USE_BIGINT`
|
|
647
|
+
* is defined), this function then attempts to convert the BigInt to a C
|
|
648
|
+
* `mrb_int` using `mrb_bint_as_int`. This conversion may involve truncation
|
|
649
|
+
* if the BigInt's value is outside the representable range of `mrb_int`,
|
|
650
|
+
* or it could raise an error (e.g., RangeError) depending on the
|
|
651
|
+
* `mrb_bint_as_int` implementation if the value is too large to truncate.
|
|
652
|
+
*
|
|
653
|
+
* If `val` is already a standard Integer (Fixnum) after the call to
|
|
654
|
+
* `mrb_ensure_integer_type`, it is returned directly as it fits `mrb_int`.
|
|
655
|
+
*
|
|
656
|
+
* Returns an `mrb_value` that represents a C `mrb_int`.
|
|
657
|
+
*/
|
|
658
|
+
MRB_API mrb_value
|
|
659
|
+
mrb_ensure_int_type(mrb_state *mrb, mrb_value val)
|
|
660
|
+
{
|
|
661
|
+
val = mrb_ensure_integer_type(mrb, val);
|
|
662
|
+
#ifdef MRB_USE_BIGINT
|
|
663
|
+
if (mrb_bigint_p(val)) {
|
|
664
|
+
return mrb_int_value(mrb, mrb_bint_as_int(mrb, val));
|
|
665
|
+
}
|
|
666
|
+
#endif
|
|
667
|
+
return val;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
#ifndef MRB_NO_FLOAT
|
|
671
|
+
/*
|
|
672
|
+
* Ensures that the given mruby value `val` is a Float.
|
|
673
|
+
*
|
|
674
|
+
* If `val` is `nil`, this function raises a `TypeError`.
|
|
675
|
+
*
|
|
676
|
+
* If `val` is an `MRB_TT_INTEGER`, it is converted to an `mrb_float`.
|
|
677
|
+
* If `val` is already an `MRB_TT_FLOAT`, it is returned directly.
|
|
678
|
+
*
|
|
679
|
+
* The function also handles conversions from other numeric types if the
|
|
680
|
+
* respective mruby modules are enabled:
|
|
681
|
+
* - `MRB_TT_RATIONAL` (if `MRB_USE_RATIONAL` is defined): Converted to Float
|
|
682
|
+
* using `mrb_rational_to_f`.
|
|
683
|
+
* - `MRB_TT_COMPLEX` (if `MRB_USE_COMPLEX` is defined): Converted to Float
|
|
684
|
+
* using `mrb_complex_to_f` (typically requires the imaginary part to be zero).
|
|
685
|
+
* - `MRB_TT_BIGINT` (if `MRB_USE_BIGINT` is defined): Converted to Float
|
|
686
|
+
* using `mrb_bint_as_float`.
|
|
687
|
+
*
|
|
688
|
+
* If `val` cannot be converted to a Float (e.g., it's a String, Array, or
|
|
689
|
+
* an incompatible Complex number), a `TypeError` is raised.
|
|
690
|
+
*
|
|
691
|
+
* Returns an `mrb_value` representing an `mrb_float`.
|
|
692
|
+
*/
|
|
693
|
+
MRB_API mrb_value
|
|
694
|
+
mrb_ensure_float_type(mrb_state *mrb, mrb_value val)
|
|
695
|
+
{
|
|
696
|
+
if (mrb_nil_p(val)) {
|
|
697
|
+
mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Float");
|
|
698
|
+
}
|
|
699
|
+
switch (mrb_type(val)) {
|
|
700
|
+
case MRB_TT_INTEGER:
|
|
701
|
+
return mrb_float_value(mrb, (mrb_float)mrb_integer(val));
|
|
702
|
+
|
|
703
|
+
case MRB_TT_FLOAT:
|
|
704
|
+
return val;
|
|
705
|
+
|
|
706
|
+
#ifdef MRB_USE_RATIONAL
|
|
707
|
+
case MRB_TT_RATIONAL:
|
|
708
|
+
return mrb_rational_to_f(mrb, val);
|
|
709
|
+
#endif
|
|
710
|
+
|
|
711
|
+
#ifdef MRB_USE_COMPLEX
|
|
712
|
+
case MRB_TT_COMPLEX:
|
|
713
|
+
return mrb_complex_to_f(mrb, val);
|
|
714
|
+
#endif
|
|
715
|
+
|
|
716
|
+
#ifdef MRB_USE_BIGINT
|
|
717
|
+
case MRB_TT_BIGINT:
|
|
718
|
+
return mrb_float_value(mrb, mrb_bint_as_float(mrb, val));
|
|
719
|
+
#endif
|
|
720
|
+
|
|
721
|
+
default:
|
|
722
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Float", val);
|
|
723
|
+
/* not reached */
|
|
724
|
+
return val;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
#endif
|
|
728
|
+
|
|
729
|
+
/*
|
|
730
|
+
* Ensures that the given mruby value `str` is a String.
|
|
731
|
+
*
|
|
732
|
+
* If `str` is not of type `MRB_TT_STRING`, this function raises
|
|
733
|
+
* a `TypeError`.
|
|
734
|
+
* Otherwise, `str` itself is returned.
|
|
735
|
+
*/
|
|
736
|
+
MRB_API mrb_value
|
|
737
|
+
mrb_ensure_string_type(mrb_state *mrb, mrb_value str)
|
|
738
|
+
{
|
|
739
|
+
if (!mrb_string_p(str)) {
|
|
740
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to String", str);
|
|
741
|
+
}
|
|
742
|
+
return str;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/*
|
|
746
|
+
* Checks if the given mruby value `str` is a String.
|
|
747
|
+
*
|
|
748
|
+
* If `str` is of type `MRB_TT_STRING`, this function returns `str`.
|
|
749
|
+
* Otherwise (if `str` is not a String), it returns `mrb_nil_value()`
|
|
750
|
+
* without raising an error. This allows for type checking without
|
|
751
|
+
* forcing error handling.
|
|
752
|
+
*/
|
|
753
|
+
MRB_API mrb_value
|
|
754
|
+
mrb_check_string_type(mrb_state *mrb, mrb_value str)
|
|
755
|
+
{
|
|
756
|
+
if (!mrb_string_p(str)) return mrb_nil_value();
|
|
757
|
+
return str;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
/*
|
|
761
|
+
* Ensures that the given mruby value `ary` is an Array.
|
|
762
|
+
*
|
|
763
|
+
* If `ary` is not of type `MRB_TT_ARRAY`, this function raises
|
|
764
|
+
* a `TypeError`.
|
|
765
|
+
* Otherwise, `ary` itself is returned.
|
|
766
|
+
*/
|
|
767
|
+
MRB_API mrb_value
|
|
768
|
+
mrb_ensure_array_type(mrb_state *mrb, mrb_value ary)
|
|
769
|
+
{
|
|
770
|
+
if (!mrb_array_p(ary)) {
|
|
771
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Array", ary);
|
|
772
|
+
}
|
|
773
|
+
return ary;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/*
|
|
777
|
+
* Checks if the given mruby value `ary` is an Array.
|
|
778
|
+
*
|
|
779
|
+
* If `ary` is of type `MRB_TT_ARRAY`, this function returns `ary`.
|
|
780
|
+
* Otherwise (if `ary` is not an Array), it returns `mrb_nil_value()`
|
|
781
|
+
* without raising an error. This allows for type checking without
|
|
782
|
+
* forcing error handling.
|
|
783
|
+
*/
|
|
784
|
+
MRB_API mrb_value
|
|
785
|
+
mrb_check_array_type(mrb_state *mrb, mrb_value ary)
|
|
786
|
+
{
|
|
787
|
+
if (!mrb_array_p(ary)) return mrb_nil_value();
|
|
788
|
+
return ary;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
/*
|
|
792
|
+
* Ensures that the given mruby value `hash` is a Hash.
|
|
793
|
+
*
|
|
794
|
+
* If `hash` is not of type `MRB_TT_HASH`, this function raises
|
|
795
|
+
* a `TypeError`.
|
|
796
|
+
* Otherwise, `hash` itself is returned.
|
|
797
|
+
*/
|
|
798
|
+
MRB_API mrb_value
|
|
799
|
+
mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash)
|
|
800
|
+
{
|
|
801
|
+
if (!mrb_hash_p(hash)) {
|
|
802
|
+
mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Hash", hash);
|
|
803
|
+
}
|
|
804
|
+
return hash;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/*
|
|
808
|
+
* Checks if the given mruby value `hash` is a Hash.
|
|
809
|
+
*
|
|
810
|
+
* If `hash` is of type `MRB_TT_HASH`, this function returns `hash`.
|
|
811
|
+
* Otherwise (if `hash` is not a Hash), it returns `mrb_nil_value()`
|
|
812
|
+
* without raising an error. This allows for type checking without
|
|
813
|
+
* forcing error handling.
|
|
814
|
+
*/
|
|
815
|
+
MRB_API mrb_value
|
|
816
|
+
mrb_check_hash_type(mrb_state *mrb, mrb_value hash)
|
|
817
|
+
{
|
|
818
|
+
if (!mrb_hash_p(hash)) return mrb_nil_value();
|
|
819
|
+
return hash;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
/*
|
|
823
|
+
* Returns a human-readable string representation of the mruby object `obj`.
|
|
824
|
+
*
|
|
825
|
+
* This function calls the `inspect` method (identified by `MRB_SYM(inspect)`)
|
|
826
|
+
* on the given `obj`. The `inspect` method is expected to return a string
|
|
827
|
+
* that is suitable for debugging and inspection.
|
|
828
|
+
*
|
|
829
|
+
* If the object's `inspect` method does not return a String value (e.g., it
|
|
830
|
+
* returns `nil` or another type, or if the class doesn't define `inspect`
|
|
831
|
+
* appropriately), this function falls back to calling `mrb_obj_as_string`.
|
|
832
|
+
* `mrb_obj_as_string` typically provides a basic string representation,
|
|
833
|
+
* such as "#<ClassName:0xPointer>" if `inspect` is unavailable or
|
|
834
|
+
* misbehaves by not returning a string.
|
|
835
|
+
*
|
|
836
|
+
* The function ultimately returns the resulting string `mrb_value`.
|
|
837
|
+
*/
|
|
838
|
+
MRB_API mrb_value
|
|
839
|
+
mrb_inspect(mrb_state *mrb, mrb_value obj)
|
|
840
|
+
{
|
|
841
|
+
mrb_value v = mrb_funcall_argv(mrb, obj, MRB_SYM(inspect), 0, NULL);
|
|
842
|
+
if (!mrb_string_p(v)) {
|
|
843
|
+
v = mrb_obj_as_string(mrb, obj);
|
|
844
|
+
}
|
|
845
|
+
return v;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
/*
|
|
849
|
+
* Checks if two mruby values, `obj1` and `obj2`, are equal using
|
|
850
|
+
* `eql?` semantics.
|
|
851
|
+
*
|
|
852
|
+
* This function first performs an identity check on `obj1` and `obj2`
|
|
853
|
+
* using `mrb_obj_eq`. If they are identical (i.e., the same object),
|
|
854
|
+
* it returns `TRUE` immediately.
|
|
855
|
+
*
|
|
856
|
+
* Otherwise, it calls the `eql?` method on `obj1`, passing `obj2` as
|
|
857
|
+
* an argument. The symbol for the `eql?` method is `MRB_SYM_Q(eql)`.
|
|
858
|
+
*
|
|
859
|
+
* The function returns `TRUE` if the `eql?` method call returns a truthy
|
|
860
|
+
* value (any value other than `false` or `nil`). Otherwise, it returns
|
|
861
|
+
* `FALSE`. This is determined by `mrb_test` on the result of the
|
|
862
|
+
* method call.
|
|
863
|
+
*/
|
|
864
|
+
MRB_API mrb_bool
|
|
865
|
+
mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
|
|
866
|
+
{
|
|
867
|
+
if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
|
|
868
|
+
return mrb_test(mrb_funcall_argv(mrb, obj1, MRB_SYM_Q(eql), 1, &obj2));
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
/*
|
|
872
|
+
* Returns the receiver object itself.
|
|
873
|
+
*
|
|
874
|
+
* This function simply returns the mruby value `self` that it was passed.
|
|
875
|
+
* It corresponds to the `Object#itself` method in Ruby, which is useful
|
|
876
|
+
* in some functional programming patterns or for obtaining the object
|
|
877
|
+
* itself in a chain of method calls.
|
|
878
|
+
*/
|
|
879
|
+
MRB_API mrb_value
|
|
880
|
+
mrb_obj_itself(mrb_state *mrb, mrb_value self)
|
|
881
|
+
{
|
|
882
|
+
return self;
|
|
883
|
+
}
|