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,937 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** error.c - Exception class
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#include <errno.h>
|
|
8
|
+
#include <stdlib.h>
|
|
9
|
+
#include <mruby.h>
|
|
10
|
+
#include <mruby/array.h>
|
|
11
|
+
#include <mruby/irep.h>
|
|
12
|
+
#include <mruby/proc.h>
|
|
13
|
+
#include <mruby/string.h>
|
|
14
|
+
#include <mruby/variable.h>
|
|
15
|
+
#include <mruby/error.h>
|
|
16
|
+
#include <mruby/class.h>
|
|
17
|
+
#include <mruby/throw.h>
|
|
18
|
+
#include <mruby/internal.h>
|
|
19
|
+
#include <mruby/presym.h>
|
|
20
|
+
|
|
21
|
+
void
|
|
22
|
+
mrb_exc_mesg_set(mrb_state *mrb, struct RException *exc, mrb_value mesg)
|
|
23
|
+
{
|
|
24
|
+
if (!mrb_string_p(mesg)) {
|
|
25
|
+
mesg = mrb_obj_as_string(mrb, mesg);
|
|
26
|
+
}
|
|
27
|
+
exc->mesg = mrb_basic_ptr(mesg);
|
|
28
|
+
mrb_field_write_barrier_value(mrb, (struct RBasic*)exc, mesg);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
mrb_value
|
|
32
|
+
mrb_exc_mesg_get(mrb_state *mrb, struct RException *exc)
|
|
33
|
+
{
|
|
34
|
+
if (exc->mesg == NULL) return mrb_nil_value();
|
|
35
|
+
return mrb_obj_value(exc->mesg);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
MRB_API mrb_value
|
|
39
|
+
mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str)
|
|
40
|
+
{
|
|
41
|
+
mrb_ensure_string_type(mrb, str);
|
|
42
|
+
|
|
43
|
+
struct RException *e = MRB_OBJ_ALLOC(mrb, MRB_TT_EXCEPTION, c);
|
|
44
|
+
mrb_value exc = mrb_obj_value(e);
|
|
45
|
+
mrb_exc_mesg_set(mrb, e, str);
|
|
46
|
+
return exc;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
MRB_API mrb_value
|
|
50
|
+
mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, mrb_int len)
|
|
51
|
+
{
|
|
52
|
+
return mrb_exc_new_str(mrb, c, mrb_str_new(mrb, ptr, len));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
* call-seq:
|
|
57
|
+
* Exception.new(msg = nil) -> exception
|
|
58
|
+
*
|
|
59
|
+
* Construct a new Exception object, optionally passing in
|
|
60
|
+
* a message.
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
static mrb_value
|
|
64
|
+
exc_initialize(mrb_state *mrb, mrb_value exc)
|
|
65
|
+
{
|
|
66
|
+
mrb_value mesg;
|
|
67
|
+
|
|
68
|
+
if (mrb_get_args(mrb, "|o", &mesg) == 1) {
|
|
69
|
+
mrb_exc_mesg_set(mrb, mrb_exc_ptr(exc), mesg);
|
|
70
|
+
}
|
|
71
|
+
return exc;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* Document-method: exception
|
|
76
|
+
*
|
|
77
|
+
* call-seq:
|
|
78
|
+
* exc.exception(string) -> an_exception or exc
|
|
79
|
+
*
|
|
80
|
+
* With no argument, or if the argument is the same as the receiver,
|
|
81
|
+
* return the receiver. Otherwise, create a new
|
|
82
|
+
* exception object of the same class as the receiver, but with a
|
|
83
|
+
* message equal to `string`.
|
|
84
|
+
*
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
static mrb_value
|
|
88
|
+
exc_exception(mrb_state *mrb, mrb_value self)
|
|
89
|
+
{
|
|
90
|
+
mrb_value a;
|
|
91
|
+
mrb_int argc = mrb_get_args(mrb, "|o", &a);
|
|
92
|
+
|
|
93
|
+
if (argc == 0) return self;
|
|
94
|
+
if (mrb_obj_equal(mrb, self, a)) return self;
|
|
95
|
+
|
|
96
|
+
mrb_value exc = mrb_obj_clone(mrb, self);
|
|
97
|
+
mrb_exc_mesg_set(mrb, mrb_exc_ptr(exc), a);
|
|
98
|
+
|
|
99
|
+
return exc;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* call-seq:
|
|
104
|
+
* exception.to_s -> string
|
|
105
|
+
*
|
|
106
|
+
* Returns exception's message (or the name of the exception if
|
|
107
|
+
* no message is set).
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
static mrb_value
|
|
111
|
+
exc_to_s(mrb_state *mrb, mrb_value exc)
|
|
112
|
+
{
|
|
113
|
+
mrb_value mesg = mrb_exc_mesg_get(mrb, mrb_exc_ptr(exc));
|
|
114
|
+
|
|
115
|
+
if (!mrb_string_p(mesg)) {
|
|
116
|
+
return mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc));
|
|
117
|
+
}
|
|
118
|
+
struct RObject *p = mrb_obj_ptr(mesg);
|
|
119
|
+
if (!p->c) {
|
|
120
|
+
p->c = mrb->string_class;
|
|
121
|
+
}
|
|
122
|
+
return mesg;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* call-seq:
|
|
127
|
+
* exception.inspect -> string
|
|
128
|
+
*
|
|
129
|
+
* Returns this exception's filename, line number,
|
|
130
|
+
* message and class name.
|
|
131
|
+
* If filename or line number is not set,
|
|
132
|
+
* returns message and class name.
|
|
133
|
+
*/
|
|
134
|
+
|
|
135
|
+
mrb_value
|
|
136
|
+
mrb_exc_inspect(mrb_state *mrb, mrb_value exc)
|
|
137
|
+
{
|
|
138
|
+
mrb_value cname = mrb_mod_to_s(mrb, mrb_obj_value(mrb_obj_class(mrb, exc)));
|
|
139
|
+
mrb_value mesg = mrb_exc_mesg_get(mrb, mrb_exc_ptr(exc)); /* string or nil */
|
|
140
|
+
return (mrb_nil_p(mesg)||RSTRING_LEN(mesg)==0) ? cname : mrb_format(mrb, "#<%v: %v>", cname, mesg);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
mrb_value
|
|
144
|
+
mrb_exc_get_output(mrb_state *mrb, struct RObject *exc)
|
|
145
|
+
{
|
|
146
|
+
mrb_value cname = mrb_mod_to_s(mrb, mrb_obj_value(mrb_class_real(exc->c)));
|
|
147
|
+
mrb_value mesg = mrb_exc_mesg_get(mrb, (struct RException*)exc); /* string or nil */
|
|
148
|
+
return (mrb_nil_p(mesg)||RSTRING_LEN(mesg)==0) ? cname : mrb_format(mrb, "%v (%v)", mesg, cname);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
void mrb_keep_backtrace(mrb_state *mrb, mrb_value exc);
|
|
152
|
+
|
|
153
|
+
static void
|
|
154
|
+
set_backtrace(mrb_state *mrb, mrb_value exc, mrb_value backtrace)
|
|
155
|
+
{
|
|
156
|
+
if (!mrb_array_p(backtrace)) {
|
|
157
|
+
type_err:
|
|
158
|
+
mrb_raise(mrb, E_TYPE_ERROR, "backtrace must be Array of String");
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
const mrb_value *p = RARRAY_PTR(backtrace);
|
|
162
|
+
const mrb_value *pend = p + RARRAY_LEN(backtrace);
|
|
163
|
+
|
|
164
|
+
while (p < pend) {
|
|
165
|
+
if (!mrb_string_p(*p)) goto type_err;
|
|
166
|
+
p++;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
mrb_exc_ptr(exc)->backtrace = mrb_basic_ptr(backtrace);
|
|
170
|
+
mrb_field_write_barrier_value(mrb, mrb_basic_ptr(exc), backtrace);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static mrb_value
|
|
174
|
+
exc_set_backtrace(mrb_state *mrb, mrb_value exc)
|
|
175
|
+
{
|
|
176
|
+
mrb_value backtrace = mrb_get_arg1(mrb);
|
|
177
|
+
|
|
178
|
+
set_backtrace(mrb, exc, backtrace);
|
|
179
|
+
return backtrace;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
void
|
|
183
|
+
mrb_exc_set(mrb_state *mrb, mrb_value exc)
|
|
184
|
+
{
|
|
185
|
+
if (mrb_nil_p(exc)) {
|
|
186
|
+
mrb->exc = 0;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
mrb->exc = mrb_obj_ptr(exc);
|
|
190
|
+
if (mrb->gc.arena_idx > 0 &&
|
|
191
|
+
(struct RBasic*)mrb->exc == mrb->gc.arena[mrb->gc.arena_idx-1]) {
|
|
192
|
+
mrb->gc.arena_idx--;
|
|
193
|
+
}
|
|
194
|
+
if (!mrb->gc.out_of_memory && !mrb_frozen_p(mrb->exc)) {
|
|
195
|
+
mrb_keep_backtrace(mrb, exc);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
static mrb_noreturn void
|
|
201
|
+
exc_throw(mrb_state *mrb, mrb_value exc)
|
|
202
|
+
{
|
|
203
|
+
if (!mrb->jmp) {
|
|
204
|
+
mrb_print_error(mrb);
|
|
205
|
+
abort();
|
|
206
|
+
}
|
|
207
|
+
MRB_THROW(mrb->jmp);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/*
|
|
211
|
+
* Raises the given exception object.
|
|
212
|
+
*
|
|
213
|
+
* This function sets the provided exception object as the current
|
|
214
|
+
* exception in the mruby state and then triggers the exception
|
|
215
|
+
* handling mechanism (longjmp).
|
|
216
|
+
*
|
|
217
|
+
* If the provided object is a 'break' object, it's handled specially.
|
|
218
|
+
* If it's not an exception object, a TypeError is raised.
|
|
219
|
+
*
|
|
220
|
+
* mrb: The mruby state.
|
|
221
|
+
* exc: The exception object to raise.
|
|
222
|
+
*/
|
|
223
|
+
MRB_API mrb_noreturn void
|
|
224
|
+
mrb_exc_raise(mrb_state *mrb, mrb_value exc)
|
|
225
|
+
{
|
|
226
|
+
if (mrb_break_p(exc)) {
|
|
227
|
+
mrb->exc = mrb_obj_ptr(exc);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
if (mrb_type(exc) != MRB_TT_EXCEPTION) {
|
|
231
|
+
mrb_raise(mrb, E_TYPE_ERROR, "exception object expected");
|
|
232
|
+
}
|
|
233
|
+
mrb_exc_set(mrb, exc);
|
|
234
|
+
}
|
|
235
|
+
exc_throw(mrb, exc);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/*
|
|
239
|
+
* Creates a new exception of class `c` with the message `msg` and raises it.
|
|
240
|
+
*
|
|
241
|
+
* This is a convenience function that combines creating an exception
|
|
242
|
+
* from a C string and then raising it.
|
|
243
|
+
*
|
|
244
|
+
* mrb: The mruby state.
|
|
245
|
+
* c: The exception class to instantiate.
|
|
246
|
+
* msg: The C string message for the exception.
|
|
247
|
+
*/
|
|
248
|
+
MRB_API mrb_noreturn void
|
|
249
|
+
mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg)
|
|
250
|
+
{
|
|
251
|
+
mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mrb_str_new_cstr(mrb, msg)));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/*
|
|
255
|
+
* Formats arguments according to a format string, similar to vsprintf.
|
|
256
|
+
* This function is the core of mruby's string formatting capabilities.
|
|
257
|
+
* It takes a format string and a va_list of arguments and returns a
|
|
258
|
+
* new mruby string with the formatted result.
|
|
259
|
+
*
|
|
260
|
+
* The format string supports various specifiers to control how arguments
|
|
261
|
+
* are converted to strings.
|
|
262
|
+
*
|
|
263
|
+
* Format Sequence Syntax:
|
|
264
|
+
* %[modifier]specifier
|
|
265
|
+
*
|
|
266
|
+
* Modifier:
|
|
267
|
+
* ! : Use the 'inspect' method for conversion instead of 'to_s'.
|
|
268
|
+
*
|
|
269
|
+
* Specifiers:
|
|
270
|
+
* c : char
|
|
271
|
+
* d : int (decimal)
|
|
272
|
+
* i : mrb_int (decimal)
|
|
273
|
+
* f : mrb_float
|
|
274
|
+
* l : char* and size_t (string with length)
|
|
275
|
+
* n : mrb_sym (symbol name)
|
|
276
|
+
* s : char* (NUL-terminated C string)
|
|
277
|
+
* t : mrb_value (type/class of the object)
|
|
278
|
+
* v,S: mrb_value (converted using to_s or inspect based on '!')
|
|
279
|
+
* C : struct RClass* (class name)
|
|
280
|
+
* T : mrb_value (real type/class of the object)
|
|
281
|
+
* Y : mrb_value (uses 'inspect' if true, false, or nil, otherwise same as 'T')
|
|
282
|
+
* % : Literal '%' character (no argument consumed)
|
|
283
|
+
*
|
|
284
|
+
* mrb: The mruby state.
|
|
285
|
+
* format: The format string.
|
|
286
|
+
* ap: The va_list of arguments.
|
|
287
|
+
*
|
|
288
|
+
* Returns a new mrb_value string containing the formatted output.
|
|
289
|
+
* Raises ArgumentError if the format string is malformed.
|
|
290
|
+
*/
|
|
291
|
+
MRB_API mrb_value
|
|
292
|
+
mrb_vformat(mrb_state *mrb, const char *format, va_list ap)
|
|
293
|
+
{
|
|
294
|
+
const char *chars, *p = format, *b = format, *e;
|
|
295
|
+
char ch;
|
|
296
|
+
size_t len;
|
|
297
|
+
mrb_int i;
|
|
298
|
+
struct RClass *cls;
|
|
299
|
+
mrb_bool inspect = FALSE;
|
|
300
|
+
mrb_value result = mrb_str_new_capa(mrb, 128), obj, str;
|
|
301
|
+
int ai = mrb_gc_arena_save(mrb);
|
|
302
|
+
|
|
303
|
+
while (*p) {
|
|
304
|
+
const char c = *p++;
|
|
305
|
+
e = p;
|
|
306
|
+
if (c == '%') {
|
|
307
|
+
if (*p == '!') {
|
|
308
|
+
inspect = TRUE;
|
|
309
|
+
p++;
|
|
310
|
+
}
|
|
311
|
+
if (!*p) break;
|
|
312
|
+
switch (*p) {
|
|
313
|
+
case 'c':
|
|
314
|
+
ch = (char)va_arg(ap, int);
|
|
315
|
+
chars = &ch;
|
|
316
|
+
len = 1;
|
|
317
|
+
goto L_cat;
|
|
318
|
+
case 'd': case 'i':
|
|
319
|
+
#if MRB_INT_MAX < INT_MAX
|
|
320
|
+
i = (mrb_int)va_arg(ap, int);
|
|
321
|
+
#else
|
|
322
|
+
i = *p == 'd' ? (mrb_int)va_arg(ap, int) : va_arg(ap, mrb_int);
|
|
323
|
+
#endif
|
|
324
|
+
obj = mrb_int_value(mrb, i);
|
|
325
|
+
goto L_cat_obj;
|
|
326
|
+
#ifndef MRB_NO_FLOAT
|
|
327
|
+
case 'f':
|
|
328
|
+
obj = mrb_float_value(mrb, (mrb_float)va_arg(ap, double));
|
|
329
|
+
goto L_cat_obj;
|
|
330
|
+
#endif
|
|
331
|
+
case 'l':
|
|
332
|
+
chars = va_arg(ap, char*);
|
|
333
|
+
len = va_arg(ap, size_t);
|
|
334
|
+
L_cat:
|
|
335
|
+
if (inspect) {
|
|
336
|
+
obj = mrb_str_new(mrb, chars, len);
|
|
337
|
+
goto L_cat_obj;
|
|
338
|
+
}
|
|
339
|
+
L_cat_plain:
|
|
340
|
+
mrb_str_cat(mrb, result, b, e - b - 1);
|
|
341
|
+
mrb_str_cat(mrb, result, chars, len);
|
|
342
|
+
b = ++p;
|
|
343
|
+
mrb_gc_arena_restore(mrb, ai);
|
|
344
|
+
break;
|
|
345
|
+
case 'n':
|
|
346
|
+
#if UINT32_MAX < INT_MAX
|
|
347
|
+
obj = mrb_symbol_value((mrb_sym)va_arg(ap, int));
|
|
348
|
+
#else
|
|
349
|
+
obj = mrb_symbol_value(va_arg(ap, mrb_sym));
|
|
350
|
+
#endif
|
|
351
|
+
goto L_cat_obj;
|
|
352
|
+
case 's':
|
|
353
|
+
chars = va_arg(ap, char*);
|
|
354
|
+
if (chars == NULL) chars = "(null)";
|
|
355
|
+
len = strlen(chars);
|
|
356
|
+
goto L_cat;
|
|
357
|
+
case 't':
|
|
358
|
+
cls = mrb_class(mrb, va_arg(ap, mrb_value));
|
|
359
|
+
goto L_cat_class;
|
|
360
|
+
case 'v': case 'S':
|
|
361
|
+
obj = va_arg(ap, mrb_value);
|
|
362
|
+
L_cat_obj:
|
|
363
|
+
str = (inspect ? mrb_inspect : mrb_obj_as_string)(mrb, obj);
|
|
364
|
+
if (mrb_type(str) != MRB_TT_STRING) {
|
|
365
|
+
chars = "void (no string conversion)";
|
|
366
|
+
len = strlen(chars);
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
chars = RSTRING_PTR(str);
|
|
370
|
+
len = RSTRING_LEN(str);
|
|
371
|
+
}
|
|
372
|
+
goto L_cat_plain;
|
|
373
|
+
case 'C':
|
|
374
|
+
cls = va_arg(ap, struct RClass*);
|
|
375
|
+
L_cat_class:
|
|
376
|
+
obj = mrb_obj_value(cls);
|
|
377
|
+
goto L_cat_obj;
|
|
378
|
+
case 'T':
|
|
379
|
+
obj = va_arg(ap, mrb_value);
|
|
380
|
+
L_cat_real_class_of:
|
|
381
|
+
cls = mrb_obj_class(mrb, obj);
|
|
382
|
+
goto L_cat_class;
|
|
383
|
+
case 'Y':
|
|
384
|
+
obj = va_arg(ap, mrb_value);
|
|
385
|
+
if (!mrb_test(obj) || mrb_true_p(obj)) {
|
|
386
|
+
inspect = TRUE;
|
|
387
|
+
goto L_cat_obj;
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
goto L_cat_real_class_of;
|
|
391
|
+
}
|
|
392
|
+
case '%':
|
|
393
|
+
L_cat_current:
|
|
394
|
+
chars = p;
|
|
395
|
+
len = 1;
|
|
396
|
+
goto L_cat_plain;
|
|
397
|
+
default:
|
|
398
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed format string - %%%c", *p);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
else if (c == '\\') {
|
|
402
|
+
if (!*p) break;
|
|
403
|
+
goto L_cat_current;
|
|
404
|
+
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
mrb_str_cat(mrb, result, b, p - b);
|
|
409
|
+
return result;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/*
|
|
413
|
+
* Formats arguments according to a format string, similar to sprintf.
|
|
414
|
+
*
|
|
415
|
+
* This function takes a format string and a variable number of arguments,
|
|
416
|
+
* then calls mrb_vformat to perform the actual formatting.
|
|
417
|
+
* See mrb_vformat for details on the format string specifiers.
|
|
418
|
+
*
|
|
419
|
+
* mrb: The mruby state.
|
|
420
|
+
* format: The format string.
|
|
421
|
+
* ...: Variable arguments to be formatted.
|
|
422
|
+
*
|
|
423
|
+
* Returns a new mrb_value string containing the formatted output.
|
|
424
|
+
*/
|
|
425
|
+
MRB_API mrb_value
|
|
426
|
+
mrb_format(mrb_state *mrb, const char *format, ...)
|
|
427
|
+
{
|
|
428
|
+
va_list ap;
|
|
429
|
+
|
|
430
|
+
va_start(ap, format);
|
|
431
|
+
|
|
432
|
+
mrb_value str = mrb_vformat(mrb, format, ap);
|
|
433
|
+
va_end(ap);
|
|
434
|
+
|
|
435
|
+
return str;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
static mrb_value
|
|
439
|
+
error_va(mrb_state *mrb, struct RClass *c, const char *fmt, va_list ap)
|
|
440
|
+
{
|
|
441
|
+
return mrb_exc_new_str(mrb, c, mrb_vformat(mrb, fmt, ap));
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/*
|
|
445
|
+
* Creates a new exception of class `c` with a formatted message and raises it.
|
|
446
|
+
*
|
|
447
|
+
* This function formats a message string using `fmt` and the subsequent
|
|
448
|
+
* variable arguments, then creates an exception of class `c` with this
|
|
449
|
+
* message, and finally raises the exception.
|
|
450
|
+
* See mrb_vformat for details on the format string specifiers.
|
|
451
|
+
*
|
|
452
|
+
* mrb: The mruby state.
|
|
453
|
+
* c: The exception class to instantiate.
|
|
454
|
+
* fmt: The format string for the exception message.
|
|
455
|
+
* ...: Variable arguments for the format string.
|
|
456
|
+
*/
|
|
457
|
+
MRB_API mrb_noreturn void
|
|
458
|
+
mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
|
|
459
|
+
{
|
|
460
|
+
va_list ap;
|
|
461
|
+
|
|
462
|
+
va_start(ap, fmt);
|
|
463
|
+
|
|
464
|
+
mrb_value exc = error_va(mrb, c, fmt, ap);
|
|
465
|
+
va_end(ap);
|
|
466
|
+
|
|
467
|
+
mrb_exc_raise(mrb, exc);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/*
|
|
471
|
+
* Raises a NameError exception with a formatted message.
|
|
472
|
+
*
|
|
473
|
+
* This function creates a NameError exception. The message is generated
|
|
474
|
+
* from `fmt` and the variable arguments. The symbol `id` (e.g., the name
|
|
475
|
+
* of a missing constant or variable) is associated with the exception object
|
|
476
|
+
* via an instance variable named 'name'.
|
|
477
|
+
* See mrb_vformat for details on the format string specifiers.
|
|
478
|
+
*
|
|
479
|
+
* mrb: The mruby state.
|
|
480
|
+
* id: The symbol representing the name that caused the error.
|
|
481
|
+
* fmt: The format string for the exception message.
|
|
482
|
+
* ...: Variable arguments for the format string.
|
|
483
|
+
*/
|
|
484
|
+
MRB_API mrb_noreturn void
|
|
485
|
+
mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
|
|
486
|
+
{
|
|
487
|
+
va_list ap;
|
|
488
|
+
|
|
489
|
+
va_start(ap, fmt);
|
|
490
|
+
|
|
491
|
+
mrb_value exc = error_va(mrb, E_NAME_ERROR, fmt, ap);
|
|
492
|
+
va_end(ap);
|
|
493
|
+
mrb_iv_set(mrb, exc, MRB_IVSYM(name), mrb_symbol_value(id));
|
|
494
|
+
mrb_exc_raise(mrb, exc);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/*
|
|
498
|
+
* Prints a warning message to stderr.
|
|
499
|
+
*
|
|
500
|
+
* The message is formatted using `fmt` and the subsequent variable arguments.
|
|
501
|
+
* The output is prefixed with "warning: " and followed by a newline.
|
|
502
|
+
* This function does nothing if MRB_NO_STDIO is defined.
|
|
503
|
+
* See mrb_vformat for details on the format string specifiers.
|
|
504
|
+
*
|
|
505
|
+
* mrb: The mruby state.
|
|
506
|
+
* fmt: The format string for the warning message.
|
|
507
|
+
* ...: Variable arguments for the format string.
|
|
508
|
+
*/
|
|
509
|
+
MRB_API void
|
|
510
|
+
mrb_warn(mrb_state *mrb, const char *fmt, ...)
|
|
511
|
+
{
|
|
512
|
+
#ifndef MRB_NO_STDIO
|
|
513
|
+
va_list ap;
|
|
514
|
+
|
|
515
|
+
va_start(ap, fmt);
|
|
516
|
+
|
|
517
|
+
mrb_value str = mrb_vformat(mrb, fmt, ap);
|
|
518
|
+
fputs("warning: ", stderr);
|
|
519
|
+
fwrite(RSTRING_PTR(str), RSTRING_LEN(str), 1, stderr);
|
|
520
|
+
putc('\n', stderr);
|
|
521
|
+
va_end(ap);
|
|
522
|
+
#endif
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/*
|
|
526
|
+
* Reports an internal mruby bug, prints a message to stderr, and terminates the program.
|
|
527
|
+
*
|
|
528
|
+
* This function is called when an unexpected internal error occurs within mruby.
|
|
529
|
+
* It prints the given message prefixed with "bug: " to stderr and then
|
|
530
|
+
* calls exit(EXIT_FAILURE).
|
|
531
|
+
* If MRB_NO_STDIO is defined, the message is not printed, but the program still exits.
|
|
532
|
+
*
|
|
533
|
+
* mrb: The mruby state (currently unused in the function body but part of the API).
|
|
534
|
+
* mesg: The C string message describing the bug.
|
|
535
|
+
*/
|
|
536
|
+
MRB_API mrb_noreturn void
|
|
537
|
+
mrb_bug(mrb_state *mrb, const char *mesg)
|
|
538
|
+
{
|
|
539
|
+
#ifndef MRB_NO_STDIO
|
|
540
|
+
fputs("bug: ", stderr);
|
|
541
|
+
fputs(mesg, stderr);
|
|
542
|
+
fputs("\n", stderr);
|
|
543
|
+
#endif
|
|
544
|
+
exit(EXIT_FAILURE);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
mrb_value
|
|
548
|
+
mrb_make_exception(mrb_state *mrb, mrb_value exc, mrb_value mesg)
|
|
549
|
+
{
|
|
550
|
+
mrb_int n = 1;
|
|
551
|
+
|
|
552
|
+
if (mrb_nil_p(mesg)) {
|
|
553
|
+
n = 0;
|
|
554
|
+
}
|
|
555
|
+
if (mrb_class_p(exc)) {
|
|
556
|
+
exc = mrb_funcall_argv(mrb, exc, MRB_SYM(new), n, &mesg);
|
|
557
|
+
}
|
|
558
|
+
else if (mrb_exception_p(exc)) {
|
|
559
|
+
if (n > 0) {
|
|
560
|
+
exc = mrb_obj_clone(mrb, exc);
|
|
561
|
+
mrb_exc_mesg_set(mrb, mrb_exc_ptr(exc), mesg);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
mrb_raise(mrb, E_TYPE_ERROR, "exception class/object expected");
|
|
566
|
+
}
|
|
567
|
+
if (mrb_type(exc) != MRB_TT_EXCEPTION) {
|
|
568
|
+
mrb_raise(mrb, E_EXCEPTION, "exception object expected");
|
|
569
|
+
}
|
|
570
|
+
return exc;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/*
|
|
574
|
+
* Raises a SystemCallError if available, otherwise a RuntimeError,
|
|
575
|
+
* based on the current `errno` value.
|
|
576
|
+
*
|
|
577
|
+
* If the SystemCallError class is defined, this function attempts to call
|
|
578
|
+
* its `_sys_fail` method with the current `errno` and an optional
|
|
579
|
+
* message. This typically results in a SystemCallError being raised.
|
|
580
|
+
*
|
|
581
|
+
* If SystemCallError is not defined, or if the call to `_sys_fail`
|
|
582
|
+
* itself fails (which shouldn't happen in normal circumstances but leads
|
|
583
|
+
* to mrb_raise), it falls back to raising a RuntimeError with the
|
|
584
|
+
* given message (or a default message if `mesg` is NULL, though the
|
|
585
|
+
* current implementation would pass NULL to mrb_raise which might be
|
|
586
|
+
* an issue).
|
|
587
|
+
*
|
|
588
|
+
* mrb: The mruby state.
|
|
589
|
+
* mesg: An optional C string message to append to the error. If NULL,
|
|
590
|
+
* a default message or no message might be used depending on the
|
|
591
|
+
* error path.
|
|
592
|
+
*/
|
|
593
|
+
MRB_API mrb_noreturn void
|
|
594
|
+
mrb_sys_fail(mrb_state *mrb, const char *mesg)
|
|
595
|
+
{
|
|
596
|
+
if (mrb_class_defined_id(mrb, MRB_SYM(SystemCallError))) {
|
|
597
|
+
struct RClass *sce = mrb_class_get_id(mrb, MRB_SYM(SystemCallError));
|
|
598
|
+
mrb_int no = (mrb_int)errno;
|
|
599
|
+
if (mesg != NULL) {
|
|
600
|
+
mrb_funcall_id(mrb, mrb_obj_value(sce), MRB_SYM(_sys_fail), 2, mrb_fixnum_value(no), mrb_str_new_cstr(mrb, mesg));
|
|
601
|
+
}
|
|
602
|
+
else {
|
|
603
|
+
mrb_funcall_id(mrb, mrb_obj_value(sce), MRB_SYM(_sys_fail), 1, mrb_fixnum_value(no));
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
mrb_raise(mrb, E_RUNTIME_ERROR, mesg);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/*
|
|
611
|
+
* Raises a NoMethodError exception with a formatted message.
|
|
612
|
+
*
|
|
613
|
+
* This function creates a NoMethodError. The message is generated from
|
|
614
|
+
* `fmt` and the variable arguments. The symbol `id` (the name of the
|
|
615
|
+
* missing method) and `args` (the arguments passed to the method)
|
|
616
|
+
* are associated with the exception object via instance variables
|
|
617
|
+
* named 'name' and 'args', respectively.
|
|
618
|
+
* See mrb_vformat for details on the format string specifiers.
|
|
619
|
+
*
|
|
620
|
+
* mrb: The mruby state.
|
|
621
|
+
* id: The symbol representing the name of the undefined method.
|
|
622
|
+
* args: The arguments that were passed to the method call.
|
|
623
|
+
* fmt: The format string for the exception message.
|
|
624
|
+
* ...: Variable arguments for the format string.
|
|
625
|
+
*/
|
|
626
|
+
MRB_API mrb_noreturn void
|
|
627
|
+
mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_value args, char const* fmt, ...)
|
|
628
|
+
{
|
|
629
|
+
va_list ap;
|
|
630
|
+
|
|
631
|
+
va_start(ap, fmt);
|
|
632
|
+
|
|
633
|
+
mrb_value exc = error_va(mrb, E_NOMETHOD_ERROR, fmt, ap);
|
|
634
|
+
va_end(ap);
|
|
635
|
+
mrb_iv_set(mrb, exc, MRB_IVSYM(name), mrb_symbol_value(id));
|
|
636
|
+
mrb_iv_set(mrb, exc, MRB_IVSYM(args), args);
|
|
637
|
+
mrb_exc_raise(mrb, exc);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
static mrb_noreturn void
|
|
641
|
+
frozen_error(mrb_state *mrb, mrb_value v)
|
|
642
|
+
{
|
|
643
|
+
mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %T", v);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/*
|
|
647
|
+
* Raises a FrozenError for the given frozen object.
|
|
648
|
+
*
|
|
649
|
+
* This function is called when an attempt is made to modify an object
|
|
650
|
+
* that has been frozen. It constructs and raises a FrozenError,
|
|
651
|
+
* indicating the specific object that could not be modified.
|
|
652
|
+
*
|
|
653
|
+
* mrb: The mruby state.
|
|
654
|
+
* frozen_obj: A pointer to the RBasic structure of the frozen object.
|
|
655
|
+
*/
|
|
656
|
+
MRB_API mrb_noreturn void
|
|
657
|
+
mrb_frozen_error(mrb_state *mrb, void *frozen_obj)
|
|
658
|
+
{
|
|
659
|
+
frozen_error(mrb, mrb_obj_value(frozen_obj));
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/*
|
|
663
|
+
* Checks if the given object is frozen. If it is, raises a FrozenError.
|
|
664
|
+
*
|
|
665
|
+
* This utility function is used before attempting an operation that
|
|
666
|
+
* would modify an object, to ensure that the operation is allowed.
|
|
667
|
+
*
|
|
668
|
+
* mrb: The mruby state.
|
|
669
|
+
* o: A pointer to the RBasic structure of the object to check.
|
|
670
|
+
*/
|
|
671
|
+
MRB_API void
|
|
672
|
+
mrb_check_frozen(mrb_state *mrb, void *o)
|
|
673
|
+
{
|
|
674
|
+
if (mrb_frozen_p((struct RBasic*)o)) {
|
|
675
|
+
mrb_frozen_error(mrb, o);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/*
|
|
680
|
+
* Checks if the given mrb_value refers to a frozen object.
|
|
681
|
+
* If it is frozen, or if it's an immediate value (which are implicitly
|
|
682
|
+
* unmodifiable in a way that would trigger a FrozenError for heap objects),
|
|
683
|
+
* this function raises a FrozenError.
|
|
684
|
+
*
|
|
685
|
+
* Note: The check `mrb_immediate_p(v)` combined with `frozen_error`
|
|
686
|
+
* might be misleading. Immediate values are not "frozen" in the same
|
|
687
|
+
* sense as heap objects. This function effectively raises a FrozenError
|
|
688
|
+
* if an attempt is made to modify an immediate value or a
|
|
689
|
+
* heap-allocated object that is explicitly frozen.
|
|
690
|
+
*
|
|
691
|
+
* mrb: The mruby state.
|
|
692
|
+
* v: The mrb_value to check.
|
|
693
|
+
*/
|
|
694
|
+
MRB_API void
|
|
695
|
+
mrb_check_frozen_value(mrb_state *mrb, mrb_value v)
|
|
696
|
+
{
|
|
697
|
+
if (mrb_immediate_p(v) || mrb_frozen_p(mrb_basic_ptr(v))) {
|
|
698
|
+
frozen_error(mrb, v);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
/*
|
|
703
|
+
* Raises an ArgumentError indicating a mismatch in the number of arguments.
|
|
704
|
+
*
|
|
705
|
+
* This function is used to report errors when a method receives an
|
|
706
|
+
* incorrect number of arguments. It formats a message specifying the
|
|
707
|
+
* number of arguments received (`argc`) and the expected number,
|
|
708
|
+
* which can be an exact number (`min` == `max`), a minimum (`max` < 0),
|
|
709
|
+
* or a range (`min` to `max`).
|
|
710
|
+
*
|
|
711
|
+
* mrb: The mruby state.
|
|
712
|
+
* argc: The number of arguments actually received.
|
|
713
|
+
* min: The minimum number of arguments expected.
|
|
714
|
+
* max: The maximum number of arguments expected. If negative, it means
|
|
715
|
+
* `min` or more arguments are expected.
|
|
716
|
+
*/
|
|
717
|
+
MRB_API mrb_noreturn void
|
|
718
|
+
mrb_argnum_error(mrb_state *mrb, mrb_int argc, int min, int max)
|
|
719
|
+
{
|
|
720
|
+
#define FMT(exp) "wrong number of arguments (given %i, expected " exp ")"
|
|
721
|
+
if (min == max)
|
|
722
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d"), argc, min);
|
|
723
|
+
else if (max < 0)
|
|
724
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d+"), argc, min);
|
|
725
|
+
else
|
|
726
|
+
mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d..%d"), argc, min, max);
|
|
727
|
+
#undef FMT
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
void mrb_core_init_printabort(mrb_state *mrb);
|
|
731
|
+
|
|
732
|
+
int
|
|
733
|
+
mrb_core_init_protect(mrb_state *mrb, void (*body)(mrb_state*, void*), void *opaque)
|
|
734
|
+
{
|
|
735
|
+
struct mrb_jmpbuf *prev_jmp = mrb->jmp;
|
|
736
|
+
struct mrb_jmpbuf c_jmp;
|
|
737
|
+
volatile int err = 1;
|
|
738
|
+
|
|
739
|
+
MRB_TRY(&c_jmp) {
|
|
740
|
+
mrb->jmp = &c_jmp;
|
|
741
|
+
body(mrb, opaque);
|
|
742
|
+
err = 0;
|
|
743
|
+
} MRB_CATCH(&c_jmp) {
|
|
744
|
+
/* Leave mrb->exc set for caller to inspect */
|
|
745
|
+
} MRB_END_EXC(&c_jmp);
|
|
746
|
+
|
|
747
|
+
mrb->jmp = prev_jmp;
|
|
748
|
+
|
|
749
|
+
return err;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
mrb_noreturn void
|
|
753
|
+
mrb_core_init_abort(mrb_state *mrb)
|
|
754
|
+
{
|
|
755
|
+
mrb->exc = NULL;
|
|
756
|
+
exc_throw(mrb, mrb_nil_value());
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
void
|
|
760
|
+
mrb_protect_atexit(mrb_state *mrb)
|
|
761
|
+
{
|
|
762
|
+
if (mrb->atexit_stack_len > 0) {
|
|
763
|
+
if (mrb->c && mrb->c->ci) {
|
|
764
|
+
// Even if the call stack is incomplete due to some fault, atexit to be executed at the top level is desirable.
|
|
765
|
+
// Clean-up also makes it easier to collect unnecessary objects.
|
|
766
|
+
mrb_callinfo zero = { 0 };
|
|
767
|
+
struct mrb_context *c = mrb->c = mrb->root_c;
|
|
768
|
+
mrb_gc_arena_restore(mrb, 0);
|
|
769
|
+
|
|
770
|
+
if (c->ci == c->cibase) {
|
|
771
|
+
// Since there is no problem with the ci, the env object is detached normally.
|
|
772
|
+
struct REnv *e = mrb_vm_ci_env(c->ci);
|
|
773
|
+
*c->ci = zero;
|
|
774
|
+
c->ci->stack = c->stbase;
|
|
775
|
+
if (e) {
|
|
776
|
+
c->ci->u.env = NULL;
|
|
777
|
+
mrb_env_unshare(mrb, e, TRUE);
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
else {
|
|
781
|
+
// Any env objects on the ci that are in the process of being executed are destroyed.
|
|
782
|
+
do {
|
|
783
|
+
struct REnv *e = mrb_vm_ci_env(c->ci);
|
|
784
|
+
if (e) {
|
|
785
|
+
e->stack = NULL;
|
|
786
|
+
MRB_ENV_SET_LEN(e, 0);
|
|
787
|
+
MRB_ENV_SET_BIDX(e, 0);
|
|
788
|
+
MRB_ENV_CLOSE(e);
|
|
789
|
+
}
|
|
790
|
+
} while (c->ci-- > c->cibase);
|
|
791
|
+
c->ci = c->cibase;
|
|
792
|
+
*c->ci = zero;
|
|
793
|
+
c->ci->stack = c->stbase;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
struct mrb_jmpbuf *prev_jmp = mrb->jmp;
|
|
798
|
+
struct mrb_jmpbuf c_jmp;
|
|
799
|
+
int i = mrb->atexit_stack_len;
|
|
800
|
+
while (i > 0) {
|
|
801
|
+
MRB_TRY(&c_jmp) {
|
|
802
|
+
mrb->jmp = &c_jmp;
|
|
803
|
+
do {
|
|
804
|
+
mrb->atexit_stack[--i](mrb);
|
|
805
|
+
mrb_gc_arena_restore(mrb, 0);
|
|
806
|
+
} while (i > 0);
|
|
807
|
+
mrb->jmp = prev_jmp;
|
|
808
|
+
} MRB_CATCH(&c_jmp) {
|
|
809
|
+
mrb->jmp = prev_jmp;
|
|
810
|
+
/* ignore atexit errors */
|
|
811
|
+
mrb_gc_arena_restore(mrb, 0);
|
|
812
|
+
} MRB_END_EXC(&c_jmp);
|
|
813
|
+
}
|
|
814
|
+
#ifndef MRB_FIXED_STATE_ATEXIT_STACK
|
|
815
|
+
mrb_free(mrb, mrb->atexit_stack);
|
|
816
|
+
#endif
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
mrb_noreturn void
|
|
821
|
+
mrb_raise_nomemory(mrb_state *mrb)
|
|
822
|
+
{
|
|
823
|
+
if (mrb->nomem_err) {
|
|
824
|
+
mrb_exc_raise(mrb, mrb_obj_value(mrb->nomem_err));
|
|
825
|
+
}
|
|
826
|
+
else {
|
|
827
|
+
mrb_core_init_abort(mrb);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/*
|
|
832
|
+
* Prints the current exception and its backtrace to stderr.
|
|
833
|
+
*
|
|
834
|
+
* If an exception is set in the mruby state (`mrb->exc`), this function
|
|
835
|
+
* attempts to print its details, including the class name, message,
|
|
836
|
+
* and backtrace.
|
|
837
|
+
* It takes precautions to handle potential errors during the backtrace
|
|
838
|
+
* printing itself, especially if called from a context without an active
|
|
839
|
+
* jump buffer (e.g., top-level error).
|
|
840
|
+
* This function does nothing if MRB_NO_STDIO is defined.
|
|
841
|
+
*
|
|
842
|
+
* mrb: The mruby state.
|
|
843
|
+
*/
|
|
844
|
+
MRB_API void
|
|
845
|
+
mrb_print_error(mrb_state *mrb)
|
|
846
|
+
{
|
|
847
|
+
#ifndef MRB_NO_STDIO
|
|
848
|
+
if (!mrb) {
|
|
849
|
+
/* mrb_open() returned NULL - allocation failed */
|
|
850
|
+
fputs("Failed to allocate mrb_state\n", stderr);
|
|
851
|
+
return;
|
|
852
|
+
}
|
|
853
|
+
if (mrb->jmp == NULL) {
|
|
854
|
+
struct mrb_jmpbuf c_jmp;
|
|
855
|
+
MRB_TRY(&c_jmp) {
|
|
856
|
+
mrb->jmp = &c_jmp;
|
|
857
|
+
mrb_print_backtrace(mrb);
|
|
858
|
+
} MRB_CATCH(&c_jmp) {
|
|
859
|
+
/* ignore exception during print_backtrace() */
|
|
860
|
+
} MRB_END_EXC(&c_jmp);
|
|
861
|
+
mrb->jmp = NULL;
|
|
862
|
+
}
|
|
863
|
+
else {
|
|
864
|
+
mrb_print_backtrace(mrb);
|
|
865
|
+
}
|
|
866
|
+
#endif
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/*
|
|
870
|
+
* Clears the current exception status in the mruby state.
|
|
871
|
+
*
|
|
872
|
+
* After this function is called, `mrb->exc` will be NULL, indicating
|
|
873
|
+
* that there is no pending exception.
|
|
874
|
+
*
|
|
875
|
+
* mrb: The mruby state.
|
|
876
|
+
*/
|
|
877
|
+
MRB_API void
|
|
878
|
+
mrb_clear_error(mrb_state *mrb)
|
|
879
|
+
{
|
|
880
|
+
mrb->exc = NULL;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
/* returns TRUE if error in the previous call; internally calls mrb_clear_error() */
|
|
884
|
+
MRB_API mrb_bool
|
|
885
|
+
mrb_check_error(mrb_state *mrb)
|
|
886
|
+
{
|
|
887
|
+
if (mrb->exc) {
|
|
888
|
+
mrb_clear_error(mrb);
|
|
889
|
+
return TRUE;
|
|
890
|
+
}
|
|
891
|
+
return FALSE;
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
/* ---------------------------*/
|
|
895
|
+
static const mrb_mt_entry exception_rom_entries[] = {
|
|
896
|
+
MRB_MT_ENTRY(exc_exception, MRB_SYM(exception), MRB_ARGS_OPT(1)),
|
|
897
|
+
MRB_MT_ENTRY(exc_initialize, MRB_SYM(initialize), MRB_ARGS_OPT(1) | MRB_MT_PRIVATE),
|
|
898
|
+
MRB_MT_ENTRY(exc_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()),
|
|
899
|
+
MRB_MT_ENTRY(exc_to_s, MRB_SYM(message), MRB_ARGS_NONE()),
|
|
900
|
+
MRB_MT_ENTRY(mrb_exc_inspect, MRB_SYM(inspect), MRB_ARGS_NONE()),
|
|
901
|
+
MRB_MT_ENTRY(mrb_exc_backtrace, MRB_SYM(backtrace), MRB_ARGS_NONE()),
|
|
902
|
+
MRB_MT_ENTRY(exc_set_backtrace, MRB_SYM(set_backtrace), MRB_ARGS_REQ(1)),
|
|
903
|
+
};
|
|
904
|
+
|
|
905
|
+
void
|
|
906
|
+
mrb_init_exception(mrb_state *mrb)
|
|
907
|
+
{
|
|
908
|
+
struct RClass *exception = mrb->eException_class = mrb_define_class_id(mrb, MRB_SYM(Exception), mrb->object_class); /* 15.2.22 */
|
|
909
|
+
MRB_SET_INSTANCE_TT(exception, MRB_TT_EXCEPTION);
|
|
910
|
+
mrb_define_class_method_id(mrb, exception, MRB_SYM(exception), mrb_instance_new, MRB_ARGS_OPT(1));
|
|
911
|
+
MRB_MT_INIT_ROM(mrb, exception, exception_rom_entries);
|
|
912
|
+
|
|
913
|
+
mrb->eStandardError_class = mrb_define_class_id(mrb, MRB_SYM(StandardError), mrb->eException_class); /* 15.2.23 */
|
|
914
|
+
mrb_define_class_id(mrb, MRB_SYM(ArgumentError), E_STANDARD_ERROR); /* 15.2.24 */
|
|
915
|
+
mrb_define_class_id(mrb, MRB_SYM(LocalJumpError), E_STANDARD_ERROR); /* 15.2.25 */
|
|
916
|
+
struct RClass *range_error = mrb_define_class_id(mrb, MRB_SYM(RangeError), E_STANDARD_ERROR); /* 15.2.26 */
|
|
917
|
+
mrb_define_class_id(mrb, MRB_SYM(FloatDomainError), range_error);
|
|
918
|
+
mrb_define_class_id(mrb, MRB_SYM(RegexpError), E_STANDARD_ERROR); /* 15.2.27 */
|
|
919
|
+
struct RClass *runtime_error = mrb_define_class_id(mrb, MRB_SYM(RuntimeError), E_STANDARD_ERROR); /* 15.2.28 */
|
|
920
|
+
mrb_define_class_id(mrb, MRB_SYM(FrozenError), runtime_error);
|
|
921
|
+
mrb_define_class_id(mrb, MRB_SYM(TypeError), E_STANDARD_ERROR); /* 15.2.29 */
|
|
922
|
+
mrb_define_class_id(mrb, MRB_SYM(ZeroDivisionError), E_STANDARD_ERROR); /* 15.2.30 */
|
|
923
|
+
struct RClass *script_error = mrb_define_class_id(mrb, MRB_SYM(ScriptError), exception); /* 15.2.37 */
|
|
924
|
+
mrb_define_class_id(mrb, MRB_SYM(NotImplementedError), script_error);
|
|
925
|
+
mrb_define_class_id(mrb, MRB_SYM(SyntaxError), script_error); /* 15.2.38 */
|
|
926
|
+
struct RClass *index_error = mrb_define_class_id(mrb, MRB_SYM(IndexError), E_STANDARD_ERROR); /* 15.2.33 */
|
|
927
|
+
mrb_define_class_id(mrb, MRB_SYM(KeyError), index_error);
|
|
928
|
+
mrb_define_class_id(mrb, MRB_SYM(NoMatchingPatternError), E_STANDARD_ERROR); /* pattern matching */
|
|
929
|
+
struct RClass *stack_error = mrb_define_class_id(mrb, MRB_SYM(SystemStackError), exception);
|
|
930
|
+
mrb->stack_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, stack_error, "stack level too deep"));
|
|
931
|
+
|
|
932
|
+
struct RClass *nomem_error = mrb_define_class_id(mrb, MRB_SYM(NoMemoryError), exception);
|
|
933
|
+
mrb->nomem_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "Out of memory"));
|
|
934
|
+
#ifdef MRB_GC_FIXED_ARENA
|
|
935
|
+
mrb->arena_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "arena overflow error"));
|
|
936
|
+
#endif
|
|
937
|
+
}
|