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,998 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** dump.c - mruby binary dumper (mrbc binary format)
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#include <mruby.h>
|
|
8
|
+
#include <mruby/dump.h>
|
|
9
|
+
#include <mruby/string.h>
|
|
10
|
+
#include <mruby/irep.h>
|
|
11
|
+
#include <mruby/debug.h>
|
|
12
|
+
#include <string.h>
|
|
13
|
+
|
|
14
|
+
#ifndef MRB_NO_FLOAT
|
|
15
|
+
#include <mruby/endian.h>
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
static size_t get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep);
|
|
19
|
+
|
|
20
|
+
#if UINT32_MAX > SIZE_MAX
|
|
21
|
+
# error This code cannot be built on your environment.
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
static size_t
|
|
25
|
+
get_irep_header_size(mrb_state *mrb)
|
|
26
|
+
{
|
|
27
|
+
size_t size = 0;
|
|
28
|
+
|
|
29
|
+
size += sizeof(uint32_t) * 1;
|
|
30
|
+
size += sizeof(uint16_t) * 3;
|
|
31
|
+
|
|
32
|
+
return size;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Writes the header of an IREP (Intermediate Representation) record to the provided buffer.
|
|
37
|
+
* This header includes information like the record size, number of local variables,
|
|
38
|
+
* number of registers, and number of child IREPs.
|
|
39
|
+
*
|
|
40
|
+
* @param mrb The mruby state. (Primarily used for `get_irep_record_size_1`)
|
|
41
|
+
* @param irep Pointer to the IREP structure whose header is to be written.
|
|
42
|
+
* @param buf Pointer to the buffer where the header will be written.
|
|
43
|
+
* @return `ptrdiff_t` representing the number of bytes written to the buffer.
|
|
44
|
+
*/
|
|
45
|
+
static ptrdiff_t
|
|
46
|
+
write_irep_header(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
|
|
47
|
+
{
|
|
48
|
+
uint8_t *cur = buf;
|
|
49
|
+
|
|
50
|
+
cur += uint32_to_bin((uint32_t)get_irep_record_size_1(mrb, irep), cur); /* record size */
|
|
51
|
+
cur += uint16_to_bin((uint16_t)irep->nlocals, cur); /* number of local variable */
|
|
52
|
+
cur += uint16_to_bin((uint16_t)irep->nregs, cur); /* number of register variable */
|
|
53
|
+
cur += uint16_to_bin((uint16_t)irep->rlen, cur); /* number of child irep */
|
|
54
|
+
|
|
55
|
+
return cur - buf;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
static size_t
|
|
59
|
+
get_iseq_block_size(mrb_state *mrb, const mrb_irep *irep)
|
|
60
|
+
{
|
|
61
|
+
size_t size = 0;
|
|
62
|
+
|
|
63
|
+
size += sizeof(uint16_t); /* clen */
|
|
64
|
+
size += sizeof(uint32_t); /* ilen */
|
|
65
|
+
size += irep->ilen * sizeof(mrb_code); /* iseq(n) */
|
|
66
|
+
size += irep->clen * sizeof(struct mrb_irep_catch_handler);
|
|
67
|
+
|
|
68
|
+
return size;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Writes the instruction sequence (iseq) block of an IREP to the provided buffer.
|
|
73
|
+
* This block includes the number of catch handlers, the number of opcodes,
|
|
74
|
+
* and the instruction sequence itself along with catch handler data.
|
|
75
|
+
*
|
|
76
|
+
* @param mrb The mruby state (currently unused in the function body but good to document).
|
|
77
|
+
* @param irep Pointer to the IREP structure whose instruction sequence is to be written.
|
|
78
|
+
* @param buf Pointer to the buffer where the instruction sequence block will be written.
|
|
79
|
+
* @param flags Flags to control the dump process (currently unused in this specific function but part of its signature).
|
|
80
|
+
* @return `ptrdiff_t` representing the number of bytes written to the buffer.
|
|
81
|
+
*/
|
|
82
|
+
static ptrdiff_t
|
|
83
|
+
write_iseq_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf, uint8_t flags)
|
|
84
|
+
{
|
|
85
|
+
uint8_t *cur = buf;
|
|
86
|
+
size_t seqlen = irep->ilen * sizeof(mrb_code) +
|
|
87
|
+
irep->clen * sizeof(struct mrb_irep_catch_handler);
|
|
88
|
+
|
|
89
|
+
cur += uint16_to_bin(irep->clen, cur); /* number of catch handlers */
|
|
90
|
+
cur += uint32_to_bin(irep->ilen, cur); /* number of opcode */
|
|
91
|
+
memcpy(cur, irep->iseq, seqlen);
|
|
92
|
+
cur += seqlen;
|
|
93
|
+
|
|
94
|
+
return cur - buf;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
#ifndef MRB_NO_FLOAT
|
|
98
|
+
/**
|
|
99
|
+
* Dumps an `mrb_float` value into the provided buffer as a `double` in IEEE 754
|
|
100
|
+
* binary format, ensuring little-endian byte order. If the system is already
|
|
101
|
+
* little-endian, it uses `memcpy`. Otherwise, it manually reverses the bytes.
|
|
102
|
+
*
|
|
103
|
+
* @param mrb The mruby state (currently unused in the function body but good to document).
|
|
104
|
+
* @param buf Pointer to the buffer where the float data will be written.
|
|
105
|
+
* @param f The float value to be dumped.
|
|
106
|
+
*/
|
|
107
|
+
static void
|
|
108
|
+
dump_float(mrb_state *mrb, uint8_t *buf, mrb_float f)
|
|
109
|
+
{
|
|
110
|
+
/* dump IEEE754 binary in little endian */
|
|
111
|
+
union {
|
|
112
|
+
double f;
|
|
113
|
+
char s[sizeof(double)];
|
|
114
|
+
} u = {(double)f};
|
|
115
|
+
|
|
116
|
+
if (littleendian) {
|
|
117
|
+
memcpy(buf, u.s, sizeof(double));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
for (size_t i=0; i<sizeof(double); i++) {
|
|
121
|
+
buf[i] = u.s[sizeof(double)-i-1];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
#endif
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Calculates the total size in bytes required to store the literal pool of an IREP.
|
|
129
|
+
* The pool can contain various data types like integers (32-bit or 64-bit),
|
|
130
|
+
* big integers, floats, and strings. The function iterates through each pool entry,
|
|
131
|
+
* determines its type and corresponding size, and accumulates the total.
|
|
132
|
+
*
|
|
133
|
+
* @param mrb The mruby state, used for memory allocation and garbage collection
|
|
134
|
+
* management (`mrb_gc_arena_save`/`restore`).
|
|
135
|
+
* @param irep Pointer to the IREP structure whose literal pool size is to be calculated.
|
|
136
|
+
* @return `size_t` representing the total calculated size of the pool block in bytes.
|
|
137
|
+
*/
|
|
138
|
+
static size_t
|
|
139
|
+
get_pool_block_size(mrb_state *mrb, const mrb_irep *irep)
|
|
140
|
+
{
|
|
141
|
+
size_t size = sizeof(uint16_t); /* plen */
|
|
142
|
+
size += irep->plen * sizeof(uint8_t); /* len(n) */
|
|
143
|
+
|
|
144
|
+
for (int pool_no = 0; pool_no < irep->plen; pool_no++) {
|
|
145
|
+
int ai = mrb_gc_arena_save(mrb);
|
|
146
|
+
|
|
147
|
+
switch (irep->pool[pool_no].tt) {
|
|
148
|
+
case IREP_TT_INT64:
|
|
149
|
+
#if defined(MRB_64BIT) || defined(MRB_INT64)
|
|
150
|
+
{
|
|
151
|
+
int64_t i = irep->pool[pool_no].u.i64;
|
|
152
|
+
|
|
153
|
+
if (i < INT32_MIN || INT32_MAX < i)
|
|
154
|
+
size += 8;
|
|
155
|
+
else
|
|
156
|
+
size += 4;
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
#else
|
|
160
|
+
/* fall through */
|
|
161
|
+
#endif
|
|
162
|
+
case IREP_TT_INT32:
|
|
163
|
+
size += 4; /* 32 bits = 4 bytes */
|
|
164
|
+
break;
|
|
165
|
+
|
|
166
|
+
case IREP_TT_BIGINT:
|
|
167
|
+
{
|
|
168
|
+
mrb_int len = (uint8_t)irep->pool[pool_no].u.str[0];
|
|
169
|
+
mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
|
|
170
|
+
size += (size_t)len+2;
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
|
|
174
|
+
case IREP_TT_FLOAT:
|
|
175
|
+
#ifndef MRB_NO_FLOAT
|
|
176
|
+
{
|
|
177
|
+
size += sizeof(double);
|
|
178
|
+
}
|
|
179
|
+
#endif
|
|
180
|
+
break;
|
|
181
|
+
|
|
182
|
+
default: /* packed IREP_TT_STRING */
|
|
183
|
+
{
|
|
184
|
+
mrb_int len = irep->pool[pool_no].tt >> 2; /* unpack length */
|
|
185
|
+
mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
|
|
186
|
+
size += sizeof(uint16_t);
|
|
187
|
+
size += (size_t)len+1;
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
mrb_gc_arena_restore(mrb, ai);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return size;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Writes the literal pool of an IREP to the provided buffer.
|
|
199
|
+
* It iterates through each entry in the pool, determines its type
|
|
200
|
+
* (integer, float, string, bigint), and writes the type identifier
|
|
201
|
+
* and a binary representation of the value to the buffer.
|
|
202
|
+
*
|
|
203
|
+
* @param mrb The mruby state, used for garbage collection management
|
|
204
|
+
* (`mrb_gc_arena_save`/`restore`) and potentially for `dump_float`.
|
|
205
|
+
* @param irep Pointer to the IREP structure whose literal pool is to be written.
|
|
206
|
+
* @param buf Pointer to the buffer where the literal pool data will be written.
|
|
207
|
+
* @return `ptrdiff_t` representing the number of bytes written to the buffer.
|
|
208
|
+
*/
|
|
209
|
+
static ptrdiff_t
|
|
210
|
+
write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
|
|
211
|
+
{
|
|
212
|
+
uint8_t *cur = buf;
|
|
213
|
+
mrb_int len;
|
|
214
|
+
const char *ptr;
|
|
215
|
+
|
|
216
|
+
cur += uint16_to_bin(irep->plen, cur); /* number of pool */
|
|
217
|
+
|
|
218
|
+
for (int pool_no = 0; pool_no < irep->plen; pool_no++) {
|
|
219
|
+
int ai = mrb_gc_arena_save(mrb);
|
|
220
|
+
|
|
221
|
+
switch (irep->pool[pool_no].tt) {
|
|
222
|
+
case IREP_TT_INT64:
|
|
223
|
+
#if defined(MRB_64BIT) || defined(MRB_INT64)
|
|
224
|
+
{
|
|
225
|
+
int64_t i = irep->pool[pool_no].u.i64;
|
|
226
|
+
if (i < INT32_MIN || INT32_MAX < i) {
|
|
227
|
+
cur += uint8_to_bin(IREP_TT_INT64, cur); /* data type */
|
|
228
|
+
cur += uint32_to_bin((uint32_t)((i>>32) & 0xffffffff), cur); /* i64 hi */
|
|
229
|
+
cur += uint32_to_bin((uint32_t)((i ) & 0xffffffff), cur); /* i64 lo */
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
cur += uint8_to_bin(IREP_TT_INT32, cur); /* data type */
|
|
233
|
+
cur += uint32_to_bin(irep->pool[pool_no].u.i32, cur); /* i32 */
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
break;
|
|
237
|
+
#endif
|
|
238
|
+
case IREP_TT_INT32:
|
|
239
|
+
cur += uint8_to_bin(IREP_TT_INT32, cur); /* data type */
|
|
240
|
+
cur += uint32_to_bin(irep->pool[pool_no].u.i32, cur); /* i32 */
|
|
241
|
+
break;
|
|
242
|
+
|
|
243
|
+
case IREP_TT_BIGINT:
|
|
244
|
+
cur += uint8_to_bin(IREP_TT_BIGINT, cur); /* data type */
|
|
245
|
+
len = (uint8_t)irep->pool[pool_no].u.str[0];
|
|
246
|
+
memcpy(cur, irep->pool[pool_no].u.str, (size_t)len+2);
|
|
247
|
+
cur += len+2;
|
|
248
|
+
break;
|
|
249
|
+
|
|
250
|
+
case IREP_TT_FLOAT:
|
|
251
|
+
cur += uint8_to_bin(IREP_TT_FLOAT, cur); /* data type */
|
|
252
|
+
#ifndef MRB_NO_FLOAT
|
|
253
|
+
{
|
|
254
|
+
dump_float(mrb, cur,irep->pool[pool_no].u.f);
|
|
255
|
+
cur += sizeof(double);
|
|
256
|
+
}
|
|
257
|
+
#else
|
|
258
|
+
cur += uint16_to_bin(0, cur); /* zero length */
|
|
259
|
+
#endif
|
|
260
|
+
break;
|
|
261
|
+
|
|
262
|
+
default: /* string */
|
|
263
|
+
cur += uint8_to_bin(IREP_TT_STR, cur); /* data type */
|
|
264
|
+
ptr = irep->pool[pool_no].u.str;
|
|
265
|
+
len = irep->pool[pool_no].tt>>2;
|
|
266
|
+
mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX);
|
|
267
|
+
cur += uint16_to_bin((uint16_t)len, cur); /* data length */
|
|
268
|
+
memcpy(cur, ptr, (size_t)len);
|
|
269
|
+
cur += len;
|
|
270
|
+
*cur++ = '\0';
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
mrb_gc_arena_restore(mrb, ai);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return cur - buf;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Calculates the total size in bytes required to store the symbol block of an IREP.
|
|
281
|
+
* This includes the count of symbols and, for each symbol, its length and
|
|
282
|
+
* the string representation (including a null terminator).
|
|
283
|
+
*
|
|
284
|
+
* @param mrb The mruby state, used for `mrb_sym_name_len` to get symbol details.
|
|
285
|
+
* @param irep Pointer to the IREP structure whose symbol block size is to be calculated.
|
|
286
|
+
* @return `size_t` representing the total calculated size of the symbol block in bytes.
|
|
287
|
+
*/
|
|
288
|
+
static size_t
|
|
289
|
+
get_syms_block_size(mrb_state *mrb, const mrb_irep *irep)
|
|
290
|
+
{
|
|
291
|
+
size_t size = sizeof(uint16_t); /* slen */
|
|
292
|
+
|
|
293
|
+
for (int sym_no = 0; sym_no < irep->slen; sym_no++) {
|
|
294
|
+
size += sizeof(uint16_t); /* snl(n) */
|
|
295
|
+
if (irep->syms[sym_no] != 0) {
|
|
296
|
+
mrb_int len;
|
|
297
|
+
mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
|
|
298
|
+
size += len + 1; /* sn(n) + null char */
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return size;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Writes the symbol block of an IREP to the provided buffer.
|
|
307
|
+
* It first writes the number of symbols. Then, for each symbol, it writes the
|
|
308
|
+
* length of the symbol's string representation followed by the string itself
|
|
309
|
+
* and a null terminator. Handles null symbols by writing `MRB_DUMP_NULL_SYM_LEN`.
|
|
310
|
+
*
|
|
311
|
+
* @param mrb The mruby state, used for `mrb_sym_name_len` to get symbol details.
|
|
312
|
+
* @param irep Pointer to the IREP structure whose symbol block is to be written.
|
|
313
|
+
* @param buf Pointer to the buffer where the symbol block data will be written.
|
|
314
|
+
* @return `ptrdiff_t` representing the number of bytes written to the buffer.
|
|
315
|
+
*/
|
|
316
|
+
static ptrdiff_t
|
|
317
|
+
write_syms_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
|
|
318
|
+
{
|
|
319
|
+
uint8_t *cur = buf;
|
|
320
|
+
|
|
321
|
+
cur += uint16_to_bin(irep->slen, cur); /* number of symbol */
|
|
322
|
+
|
|
323
|
+
for (int sym_no = 0; sym_no < irep->slen; sym_no++) {
|
|
324
|
+
if (irep->syms[sym_no] != 0) {
|
|
325
|
+
mrb_int len;
|
|
326
|
+
const char *name = mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
|
|
327
|
+
|
|
328
|
+
mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX);
|
|
329
|
+
cur += uint16_to_bin((uint16_t)len, cur); /* length of symbol name */
|
|
330
|
+
memcpy(cur, name, len); /* symbol name */
|
|
331
|
+
cur += (uint16_t)len;
|
|
332
|
+
*cur++ = '\0';
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
cur += uint16_to_bin(MRB_DUMP_NULL_SYM_LEN, cur); /* length of symbol name */
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return cur - buf;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
static size_t
|
|
343
|
+
get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep)
|
|
344
|
+
{
|
|
345
|
+
size_t size = get_irep_header_size(mrb);
|
|
346
|
+
size += get_iseq_block_size(mrb, irep);
|
|
347
|
+
size += get_pool_block_size(mrb, irep);
|
|
348
|
+
size += get_syms_block_size(mrb, irep);
|
|
349
|
+
return size;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Recursively calculates the total size in bytes of an IREP record.
|
|
354
|
+
* This includes the size of the current IREP's own data (header, iseq, pool,
|
|
355
|
+
* symbols - obtained via `get_irep_record_size_1`) and the sizes of all
|
|
356
|
+
* its child IREPs (reps).
|
|
357
|
+
*
|
|
358
|
+
* @param mrb The mruby state, passed through to helper functions.
|
|
359
|
+
* @param irep Pointer to the IREP structure for which the record size is to be calculated.
|
|
360
|
+
* @return `size_t` representing the total calculated size of the IREP record and its children in bytes.
|
|
361
|
+
*/
|
|
362
|
+
static size_t
|
|
363
|
+
get_irep_record_size(mrb_state *mrb, const mrb_irep *irep)
|
|
364
|
+
{
|
|
365
|
+
size_t size = get_irep_record_size_1(mrb, irep);
|
|
366
|
+
|
|
367
|
+
for (int irep_no = 0; irep_no < irep->rlen; irep_no++) {
|
|
368
|
+
size += get_irep_record_size(mrb, irep->reps[irep_no]);
|
|
369
|
+
}
|
|
370
|
+
return size;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
static int
|
|
374
|
+
write_irep_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *irep_record_size, uint8_t flags)
|
|
375
|
+
{
|
|
376
|
+
uint8_t *src = bin;
|
|
377
|
+
|
|
378
|
+
if (irep == NULL) {
|
|
379
|
+
return MRB_DUMP_INVALID_IREP;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
bin += write_irep_header(mrb, irep, bin);
|
|
383
|
+
bin += write_iseq_block(mrb, irep, bin, flags);
|
|
384
|
+
bin += write_pool_block(mrb, irep, bin);
|
|
385
|
+
bin += write_syms_block(mrb, irep, bin);
|
|
386
|
+
|
|
387
|
+
for (int i = 0; i < irep->rlen; i++) {
|
|
388
|
+
int result;
|
|
389
|
+
size_t rsize;
|
|
390
|
+
|
|
391
|
+
result = write_irep_record(mrb, irep->reps[i], bin, &rsize, flags);
|
|
392
|
+
if (result != MRB_DUMP_OK) {
|
|
393
|
+
return result;
|
|
394
|
+
}
|
|
395
|
+
bin += rsize;
|
|
396
|
+
}
|
|
397
|
+
*irep_record_size = bin - src;
|
|
398
|
+
return MRB_DUMP_OK;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
static uint32_t
|
|
402
|
+
write_footer(mrb_state *mrb, uint8_t *bin)
|
|
403
|
+
{
|
|
404
|
+
struct rite_binary_footer footer;
|
|
405
|
+
|
|
406
|
+
memcpy(footer.section_ident, RITE_BINARY_EOF, sizeof(footer.section_ident));
|
|
407
|
+
uint32_to_bin(sizeof(struct rite_binary_footer), footer.section_size);
|
|
408
|
+
memcpy(bin, &footer, sizeof(struct rite_binary_footer));
|
|
409
|
+
|
|
410
|
+
return sizeof(struct rite_binary_footer);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
static int
|
|
415
|
+
write_section_irep_header(mrb_state *mrb, size_t section_size, uint8_t *bin)
|
|
416
|
+
{
|
|
417
|
+
struct rite_section_irep_header *header = (struct rite_section_irep_header*)bin;
|
|
418
|
+
|
|
419
|
+
memcpy(header->section_ident, RITE_SECTION_IREP_IDENT, sizeof(header->section_ident));
|
|
420
|
+
|
|
421
|
+
mrb_assert_int_fit(size_t, section_size, uint32_t, UINT32_MAX);
|
|
422
|
+
uint32_to_bin((uint32_t)section_size, header->section_size);
|
|
423
|
+
memcpy(header->rite_version, RITE_VM_VER, sizeof(header->rite_version));
|
|
424
|
+
|
|
425
|
+
return MRB_DUMP_OK;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
static int
|
|
429
|
+
write_section_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *len_p, uint8_t flags)
|
|
430
|
+
{
|
|
431
|
+
uint8_t *cur = bin;
|
|
432
|
+
|
|
433
|
+
if (mrb == NULL || bin == NULL) {
|
|
434
|
+
return MRB_DUMP_INVALID_ARGUMENT;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
cur += sizeof(struct rite_section_irep_header);
|
|
438
|
+
|
|
439
|
+
size_t rsize = 0;
|
|
440
|
+
int result = write_irep_record(mrb, irep, cur, &rsize, flags);
|
|
441
|
+
if (result != MRB_DUMP_OK) {
|
|
442
|
+
return result;
|
|
443
|
+
}
|
|
444
|
+
mrb_assert(rsize == get_irep_record_size(mrb, irep));
|
|
445
|
+
*len_p = cur - bin + rsize;
|
|
446
|
+
write_section_irep_header(mrb, *len_p, bin);
|
|
447
|
+
|
|
448
|
+
return MRB_DUMP_OK;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
static size_t
|
|
452
|
+
get_debug_record_size(mrb_state *mrb, const mrb_irep *irep)
|
|
453
|
+
{
|
|
454
|
+
size_t ret = sizeof(uint32_t); /* record size */
|
|
455
|
+
ret += sizeof(uint16_t); /* file count */
|
|
456
|
+
|
|
457
|
+
for (uint16_t f_idx = 0; f_idx < irep->debug_info->flen; f_idx++) {
|
|
458
|
+
mrb_irep_debug_info_file const* file = irep->debug_info->files[f_idx];
|
|
459
|
+
|
|
460
|
+
ret += sizeof(uint32_t); /* position */
|
|
461
|
+
ret += sizeof(uint16_t); /* filename index */
|
|
462
|
+
|
|
463
|
+
/* lines */
|
|
464
|
+
ret += sizeof(uint32_t); /* entry count */
|
|
465
|
+
ret += sizeof(uint8_t); /* line type */
|
|
466
|
+
switch (file->line_type) {
|
|
467
|
+
case mrb_debug_line_ary:
|
|
468
|
+
ret += sizeof(uint16_t) * (size_t)(file->line_entry_count);
|
|
469
|
+
break;
|
|
470
|
+
|
|
471
|
+
case mrb_debug_line_flat_map:
|
|
472
|
+
ret += (sizeof(uint32_t) + sizeof(uint16_t)) * (size_t)(file->line_entry_count);
|
|
473
|
+
break;
|
|
474
|
+
|
|
475
|
+
case mrb_debug_line_packed_map:
|
|
476
|
+
ret += (size_t)(file->line_entry_count);
|
|
477
|
+
break;
|
|
478
|
+
|
|
479
|
+
default: mrb_assert(0); break;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
for (int i=0; i<irep->rlen; i++) {
|
|
483
|
+
ret += get_debug_record_size(mrb, irep->reps[i]);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
return ret;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
static int
|
|
490
|
+
find_filename_index(const mrb_sym *ary, int ary_len, mrb_sym s)
|
|
491
|
+
{
|
|
492
|
+
for (int i = 0; i < ary_len; i++) {
|
|
493
|
+
if (ary[i] == s) return i;
|
|
494
|
+
}
|
|
495
|
+
return -1;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
static size_t
|
|
499
|
+
get_filename_table_size(mrb_state *mrb, const mrb_irep *irep, mrb_sym **fp, uint16_t *lp)
|
|
500
|
+
{
|
|
501
|
+
mrb_sym *filenames = *fp;
|
|
502
|
+
size_t size = 0;
|
|
503
|
+
const mrb_irep_debug_info *di = irep->debug_info;
|
|
504
|
+
|
|
505
|
+
mrb_assert(lp);
|
|
506
|
+
for (int i = 0; i < di->flen; i++) {
|
|
507
|
+
mrb_irep_debug_info_file *file = di->files[i];
|
|
508
|
+
if (find_filename_index(filenames, *lp, file->filename_sym) == -1) {
|
|
509
|
+
/* register filename */
|
|
510
|
+
*lp += 1;
|
|
511
|
+
*fp = filenames = (mrb_sym*)mrb_realloc(mrb, filenames, sizeof(mrb_sym) * (*lp));
|
|
512
|
+
filenames[*lp - 1] = file->filename_sym;
|
|
513
|
+
|
|
514
|
+
/* filename */
|
|
515
|
+
mrb_int filename_len;
|
|
516
|
+
mrb_sym_name_len(mrb, file->filename_sym, &filename_len);
|
|
517
|
+
size += sizeof(uint16_t) + (size_t)filename_len;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
for (int i=0; i<irep->rlen; i++) {
|
|
521
|
+
size += get_filename_table_size(mrb, irep->reps[i], fp, lp);
|
|
522
|
+
}
|
|
523
|
+
return size;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
static size_t
|
|
527
|
+
write_debug_record_1(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len)
|
|
528
|
+
{
|
|
529
|
+
uint8_t *cur;
|
|
530
|
+
|
|
531
|
+
cur = bin + sizeof(uint32_t); /* skip record size */
|
|
532
|
+
cur += uint16_to_bin(irep->debug_info->flen, cur); /* file count */
|
|
533
|
+
|
|
534
|
+
for (int f_idx = 0; f_idx < irep->debug_info->flen; f_idx++) {
|
|
535
|
+
int filename_idx;
|
|
536
|
+
const mrb_irep_debug_info_file *file = irep->debug_info->files[f_idx];
|
|
537
|
+
|
|
538
|
+
/* position */
|
|
539
|
+
cur += uint32_to_bin(file->start_pos, cur);
|
|
540
|
+
|
|
541
|
+
/* filename index */
|
|
542
|
+
filename_idx = find_filename_index(filenames, filenames_len,
|
|
543
|
+
file->filename_sym);
|
|
544
|
+
mrb_assert_int_fit(int, filename_idx, uint16_t, UINT16_MAX);
|
|
545
|
+
cur += uint16_to_bin((uint16_t)filename_idx, cur);
|
|
546
|
+
|
|
547
|
+
/* lines */
|
|
548
|
+
cur += uint32_to_bin(file->line_entry_count, cur);
|
|
549
|
+
cur += uint8_to_bin(file->line_type, cur);
|
|
550
|
+
switch (file->line_type) {
|
|
551
|
+
case mrb_debug_line_ary: {
|
|
552
|
+
uint32_t l;
|
|
553
|
+
for (l = 0; l < file->line_entry_count; l++) {
|
|
554
|
+
cur += uint16_to_bin(file->lines.ary[l], cur);
|
|
555
|
+
}
|
|
556
|
+
} break;
|
|
557
|
+
|
|
558
|
+
case mrb_debug_line_flat_map: {
|
|
559
|
+
uint32_t line;
|
|
560
|
+
for (line = 0; line < file->line_entry_count; line++) {
|
|
561
|
+
cur += uint32_to_bin(file->lines.flat_map[line].start_pos, cur);
|
|
562
|
+
cur += uint16_to_bin(file->lines.flat_map[line].line, cur);
|
|
563
|
+
}
|
|
564
|
+
} break;
|
|
565
|
+
|
|
566
|
+
case mrb_debug_line_packed_map: {
|
|
567
|
+
memcpy(cur, file->lines.packed_map, file->line_entry_count);
|
|
568
|
+
cur += file->line_entry_count;
|
|
569
|
+
} break;
|
|
570
|
+
|
|
571
|
+
default: mrb_assert(0); break;
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
ptrdiff_t ret = cur - bin;
|
|
576
|
+
mrb_assert_int_fit(ptrdiff_t, ret, uint32_t, UINT32_MAX);
|
|
577
|
+
uint32_to_bin((uint32_t)ret, bin);
|
|
578
|
+
|
|
579
|
+
mrb_assert_int_fit(ptrdiff_t, ret, size_t, SIZE_MAX);
|
|
580
|
+
return (size_t)ret;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
static size_t
|
|
584
|
+
write_debug_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len)
|
|
585
|
+
{
|
|
586
|
+
size_t size = write_debug_record_1(mrb, irep, bin, filenames, filenames_len);
|
|
587
|
+
|
|
588
|
+
bin += size;
|
|
589
|
+
for (int irep_no = 0; irep_no < irep->rlen; irep_no++) {
|
|
590
|
+
size_t len = write_debug_record(mrb, irep->reps[irep_no], bin, filenames, filenames_len);
|
|
591
|
+
bin += len;
|
|
592
|
+
size += len;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
mrb_assert(size == get_debug_record_size(mrb, irep));
|
|
596
|
+
return size;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
static int
|
|
600
|
+
write_section_debug(mrb_state *mrb, const mrb_irep *irep, uint8_t *cur, mrb_sym const *filenames, uint16_t filenames_len)
|
|
601
|
+
{
|
|
602
|
+
const uint8_t *bin = cur;
|
|
603
|
+
|
|
604
|
+
if (mrb == NULL || cur == NULL) {
|
|
605
|
+
return MRB_DUMP_INVALID_ARGUMENT;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
struct rite_section_debug_header *header = (struct rite_section_debug_header*)bin;
|
|
609
|
+
size_t section_size = sizeof(struct rite_section_debug_header);
|
|
610
|
+
cur += section_size;
|
|
611
|
+
|
|
612
|
+
/* filename table */
|
|
613
|
+
cur += uint16_to_bin(filenames_len, cur);
|
|
614
|
+
section_size += sizeof(uint16_t);
|
|
615
|
+
for (int i = 0; i < filenames_len; i++) {
|
|
616
|
+
mrb_int sym_len;
|
|
617
|
+
char const *sym = mrb_sym_name_len(mrb, filenames[i], &sym_len);
|
|
618
|
+
|
|
619
|
+
mrb_assert(sym);
|
|
620
|
+
cur += uint16_to_bin((uint16_t)sym_len, cur);
|
|
621
|
+
memcpy(cur, sym, sym_len);
|
|
622
|
+
cur += sym_len;
|
|
623
|
+
section_size += sizeof(uint16_t) + sym_len;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/* debug records */
|
|
627
|
+
size_t dlen = write_debug_record(mrb, irep, cur, filenames, filenames_len);
|
|
628
|
+
section_size += dlen;
|
|
629
|
+
|
|
630
|
+
memcpy(header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(header->section_ident));
|
|
631
|
+
mrb_assert(section_size <= INT32_MAX);
|
|
632
|
+
uint32_to_bin((uint32_t)section_size, header->section_size);
|
|
633
|
+
|
|
634
|
+
return MRB_DUMP_OK;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
static void
|
|
638
|
+
create_lv_sym_table(mrb_state *mrb, const mrb_irep *irep, mrb_sym **syms, uint32_t *syms_len)
|
|
639
|
+
{
|
|
640
|
+
if (*syms == NULL) {
|
|
641
|
+
*syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * 1);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
for (int i = 0; i + 1 < irep->nlocals; i++) {
|
|
645
|
+
mrb_sym const name = irep->lv[i];
|
|
646
|
+
if (name == 0) continue;
|
|
647
|
+
if (find_filename_index(*syms, *syms_len, name) != -1) continue;
|
|
648
|
+
|
|
649
|
+
(*syms_len)++;
|
|
650
|
+
*syms = (mrb_sym*)mrb_realloc(mrb, *syms, sizeof(mrb_sym) * (*syms_len));
|
|
651
|
+
(*syms)[*syms_len - 1] = name;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
for (int i = 0; i < irep->rlen; i++) {
|
|
655
|
+
create_lv_sym_table(mrb, irep->reps[i], syms, syms_len);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
static int
|
|
660
|
+
write_lv_sym_table(mrb_state *mrb, uint8_t **start, mrb_sym const *syms, uint32_t syms_len)
|
|
661
|
+
{
|
|
662
|
+
uint8_t *cur = *start;
|
|
663
|
+
|
|
664
|
+
cur += uint32_to_bin(syms_len, cur);
|
|
665
|
+
|
|
666
|
+
for (uint32_t i = 0; i < syms_len; i++) {
|
|
667
|
+
mrb_int str_len;
|
|
668
|
+
const char *str = mrb_sym_name_len(mrb, syms[i], &str_len);
|
|
669
|
+
cur += uint16_to_bin((uint16_t)str_len, cur);
|
|
670
|
+
memcpy(cur, str, str_len);
|
|
671
|
+
cur += str_len;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
*start = cur;
|
|
675
|
+
|
|
676
|
+
return MRB_DUMP_OK;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
static int
|
|
680
|
+
write_lv_record(mrb_state *mrb, const mrb_irep *irep, uint8_t **start, mrb_sym const *syms, uint32_t syms_len)
|
|
681
|
+
{
|
|
682
|
+
uint8_t *cur = *start;
|
|
683
|
+
|
|
684
|
+
for (int i = 0; i + 1 < irep->nlocals; i++) {
|
|
685
|
+
if (irep->lv[i] == 0) {
|
|
686
|
+
cur += uint16_to_bin(RITE_LV_NULL_MARK, cur);
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
int const sym_idx = find_filename_index(syms, syms_len, irep->lv[i]);
|
|
690
|
+
mrb_assert(sym_idx != -1); /* local variable name must be in syms */
|
|
691
|
+
|
|
692
|
+
cur += uint16_to_bin(sym_idx, cur);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
for (int i = 0; i < irep->rlen; i++) {
|
|
697
|
+
write_lv_record(mrb, irep->reps[i], &cur, syms, syms_len);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
*start = cur;
|
|
701
|
+
|
|
702
|
+
return MRB_DUMP_OK;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
static size_t
|
|
706
|
+
get_lv_record_size(mrb_state *mrb, const mrb_irep *irep)
|
|
707
|
+
{
|
|
708
|
+
size_t ret = sizeof(uint16_t) * (irep->nlocals - 1);
|
|
709
|
+
|
|
710
|
+
for (int i = 0; i < irep->rlen; i++) {
|
|
711
|
+
ret += get_lv_record_size(mrb, irep->reps[i]);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
return ret;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
static size_t
|
|
718
|
+
get_lv_section_size(mrb_state *mrb, const mrb_irep *irep, mrb_sym const *syms, uint32_t syms_len)
|
|
719
|
+
{
|
|
720
|
+
size_t ret = sizeof(uint32_t); /* syms_len */
|
|
721
|
+
ret += sizeof(uint16_t) * syms_len; /* symbol name lengths */
|
|
722
|
+
for (uint32_t i = 0; i < syms_len; i++) {
|
|
723
|
+
mrb_int str_len;
|
|
724
|
+
mrb_sym_name_len(mrb, syms[i], &str_len);
|
|
725
|
+
ret += str_len;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
ret += get_lv_record_size(mrb, irep);
|
|
729
|
+
|
|
730
|
+
return ret;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
static int
|
|
734
|
+
write_section_lv(mrb_state *mrb, const mrb_irep *irep, uint8_t *start, mrb_sym const *syms, uint32_t const syms_len)
|
|
735
|
+
{
|
|
736
|
+
uint8_t *cur = start;
|
|
737
|
+
|
|
738
|
+
if (mrb == NULL || cur == NULL) {
|
|
739
|
+
return MRB_DUMP_INVALID_ARGUMENT;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
struct rite_section_lv_header *header = (struct rite_section_lv_header*)cur;
|
|
743
|
+
cur += sizeof(struct rite_section_lv_header);
|
|
744
|
+
|
|
745
|
+
int result = write_lv_sym_table(mrb, &cur, syms, syms_len);
|
|
746
|
+
if (result != MRB_DUMP_OK) {
|
|
747
|
+
return result;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
result = write_lv_record(mrb, irep, &cur, syms, syms_len);
|
|
751
|
+
if (result != MRB_DUMP_OK) {
|
|
752
|
+
return result;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
memcpy(header->section_ident, RITE_SECTION_LV_IDENT, sizeof(header->section_ident));
|
|
756
|
+
|
|
757
|
+
ptrdiff_t diff = cur - start;
|
|
758
|
+
mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
|
|
759
|
+
uint32_to_bin((uint32_t)diff, header->section_size);
|
|
760
|
+
|
|
761
|
+
return result;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
static int
|
|
765
|
+
write_rite_binary_header(mrb_state *mrb, size_t binary_size, uint8_t *bin, uint8_t flags)
|
|
766
|
+
{
|
|
767
|
+
struct rite_binary_header *header = (struct rite_binary_header*)bin;
|
|
768
|
+
|
|
769
|
+
memcpy(header->binary_ident, RITE_BINARY_IDENT, sizeof(header->binary_ident));
|
|
770
|
+
memcpy(header->major_version, RITE_BINARY_MAJOR_VER, sizeof(header->major_version));
|
|
771
|
+
memcpy(header->minor_version, RITE_BINARY_MINOR_VER, sizeof(header->minor_version));
|
|
772
|
+
memcpy(header->compiler_name, RITE_COMPILER_NAME, sizeof(header->compiler_name));
|
|
773
|
+
memcpy(header->compiler_version, RITE_COMPILER_VERSION, sizeof(header->compiler_version));
|
|
774
|
+
mrb_assert(binary_size <= UINT32_MAX);
|
|
775
|
+
uint32_to_bin((uint32_t)binary_size, header->binary_size);
|
|
776
|
+
|
|
777
|
+
return MRB_DUMP_OK;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
static mrb_bool
|
|
781
|
+
debug_info_defined_p(const mrb_irep *irep)
|
|
782
|
+
{
|
|
783
|
+
if (!irep->debug_info) return FALSE;
|
|
784
|
+
for (int i = 0; i < irep->rlen; i++) {
|
|
785
|
+
if (!debug_info_defined_p(irep->reps[i])) return FALSE;
|
|
786
|
+
}
|
|
787
|
+
return TRUE;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
static mrb_bool
|
|
791
|
+
lv_defined_p(const mrb_irep *irep)
|
|
792
|
+
{
|
|
793
|
+
if (irep->lv) return TRUE;
|
|
794
|
+
for (int i = 0; i < irep->rlen; i++) {
|
|
795
|
+
if (lv_defined_p(irep->reps[i])) return TRUE;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
return FALSE;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/**
|
|
802
|
+
* Dumps an IREP (Intermediate Representation) into a binary format.
|
|
803
|
+
*
|
|
804
|
+
* This function takes an IREP and converts it into a binary representation that can be
|
|
805
|
+
* stored or transmitted. The binary format includes sections for the IREP data,
|
|
806
|
+
* debug information (if specified by flags), and local variable information.
|
|
807
|
+
*
|
|
808
|
+
* @param mrb The mruby state.
|
|
809
|
+
* @param irep The IREP to dump.
|
|
810
|
+
* @param flags Flags to control the dump process (e.g., MRB_DUMP_DEBUG_INFO).
|
|
811
|
+
* @param bin A pointer to a buffer where the binary data will be stored.
|
|
812
|
+
* The buffer is allocated by this function and must be freed by the caller
|
|
813
|
+
* using mrb_free().
|
|
814
|
+
* @param bin_size A pointer to a variable where the size of the binary data will be stored.
|
|
815
|
+
*
|
|
816
|
+
* @return MRB_DUMP_OK on success, or an error code (e.g., MRB_DUMP_GENERAL_FAILURE,
|
|
817
|
+
* MRB_DUMP_INVALID_ARGUMENT) on failure.
|
|
818
|
+
*/
|
|
819
|
+
int
|
|
820
|
+
mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size)
|
|
821
|
+
{
|
|
822
|
+
size_t section_lineno_size = 0, section_lv_size = 0;
|
|
823
|
+
uint8_t *cur = NULL;
|
|
824
|
+
mrb_bool const debug_info_defined = (flags & MRB_DUMP_DEBUG_INFO) ? debug_info_defined_p(irep) : FALSE;
|
|
825
|
+
mrb_bool lv_defined = (flags & MRB_DUMP_NO_LVAR) ? FALSE : lv_defined_p(irep);
|
|
826
|
+
mrb_sym *lv_syms = NULL; uint32_t lv_syms_len = 0;
|
|
827
|
+
mrb_sym *filenames = NULL; uint16_t filenames_len = 0;
|
|
828
|
+
|
|
829
|
+
if (mrb == NULL) {
|
|
830
|
+
*bin = NULL;
|
|
831
|
+
return MRB_DUMP_GENERAL_FAILURE;
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
size_t section_irep_size = sizeof(struct rite_section_irep_header);
|
|
835
|
+
section_irep_size += get_irep_record_size(mrb, irep);
|
|
836
|
+
|
|
837
|
+
/* DEBUG section size */
|
|
838
|
+
if (debug_info_defined) {
|
|
839
|
+
section_lineno_size += sizeof(struct rite_section_debug_header);
|
|
840
|
+
/* filename table size */
|
|
841
|
+
section_lineno_size += sizeof(uint16_t);
|
|
842
|
+
section_lineno_size += get_filename_table_size(mrb, irep, &filenames, &filenames_len);
|
|
843
|
+
section_lineno_size += get_debug_record_size(mrb, irep);
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
if (lv_defined) {
|
|
847
|
+
section_lv_size += sizeof(struct rite_section_lv_header);
|
|
848
|
+
create_lv_sym_table(mrb, irep, &lv_syms, &lv_syms_len);
|
|
849
|
+
section_lv_size += get_lv_section_size(mrb, irep, lv_syms, lv_syms_len);
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
size_t malloc_size = sizeof(struct rite_binary_header) +
|
|
853
|
+
section_irep_size + section_lineno_size + section_lv_size +
|
|
854
|
+
sizeof(struct rite_binary_footer);
|
|
855
|
+
cur = *bin = (uint8_t*)mrb_malloc(mrb, malloc_size);
|
|
856
|
+
cur += sizeof(struct rite_binary_header);
|
|
857
|
+
|
|
858
|
+
int result = write_section_irep(mrb, irep, cur, §ion_irep_size, flags);
|
|
859
|
+
if (result != MRB_DUMP_OK) {
|
|
860
|
+
goto error_exit;
|
|
861
|
+
}
|
|
862
|
+
cur += section_irep_size;
|
|
863
|
+
*bin_size = sizeof(struct rite_binary_header) +
|
|
864
|
+
section_irep_size + section_lineno_size + section_lv_size +
|
|
865
|
+
sizeof(struct rite_binary_footer);
|
|
866
|
+
|
|
867
|
+
/* write DEBUG section */
|
|
868
|
+
if ((flags & MRB_DUMP_DEBUG_INFO) && debug_info_defined) {
|
|
869
|
+
result = write_section_debug(mrb, irep, cur, filenames, filenames_len);
|
|
870
|
+
if (result != MRB_DUMP_OK) {
|
|
871
|
+
goto error_exit;
|
|
872
|
+
}
|
|
873
|
+
cur += section_lineno_size;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
if (lv_defined) {
|
|
877
|
+
result = write_section_lv(mrb, irep, cur, lv_syms, lv_syms_len);
|
|
878
|
+
if (result != MRB_DUMP_OK) {
|
|
879
|
+
goto error_exit;
|
|
880
|
+
}
|
|
881
|
+
cur += section_lv_size;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
write_footer(mrb, cur);
|
|
885
|
+
write_rite_binary_header(mrb, *bin_size, *bin, flags);
|
|
886
|
+
|
|
887
|
+
error_exit:
|
|
888
|
+
if (result != MRB_DUMP_OK) {
|
|
889
|
+
mrb_free(mrb, *bin);
|
|
890
|
+
*bin = NULL;
|
|
891
|
+
}
|
|
892
|
+
mrb_free(mrb, lv_syms);
|
|
893
|
+
mrb_free(mrb, filenames);
|
|
894
|
+
return result;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
#ifndef MRB_NO_STDIO
|
|
898
|
+
|
|
899
|
+
/**
|
|
900
|
+
* Dumps an IREP (Intermediate Representation) into a binary format and writes it to a file.
|
|
901
|
+
*
|
|
902
|
+
* This function first calls `mrb_dump_irep` to get the binary representation of the IREP,
|
|
903
|
+
* then writes the binary data to the specified file pointer.
|
|
904
|
+
*
|
|
905
|
+
* @param mrb The mruby state.
|
|
906
|
+
* @param irep The IREP to dump.
|
|
907
|
+
* @param flags Flags to control the dump process.
|
|
908
|
+
* @param fp The file pointer to write the binary data to.
|
|
909
|
+
*
|
|
910
|
+
* @return MRB_DUMP_OK on success, or an error code (e.g., MRB_DUMP_INVALID_ARGUMENT,
|
|
911
|
+
* MRB_DUMP_WRITE_FAULT) on failure.
|
|
912
|
+
*/
|
|
913
|
+
int
|
|
914
|
+
mrb_dump_irep_binary(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE* fp)
|
|
915
|
+
{
|
|
916
|
+
uint8_t *bin = NULL;
|
|
917
|
+
|
|
918
|
+
if (fp == NULL) {
|
|
919
|
+
return MRB_DUMP_INVALID_ARGUMENT;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
size_t bin_size;
|
|
923
|
+
int result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
|
|
924
|
+
if (result == MRB_DUMP_OK) {
|
|
925
|
+
if (fwrite(bin, sizeof(bin[0]), bin_size, fp) != bin_size) {
|
|
926
|
+
result = MRB_DUMP_WRITE_FAULT;
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
mrb_free(mrb, bin);
|
|
931
|
+
return result;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
/**
|
|
935
|
+
* Dumps an IREP (Intermediate Representation) as a C source file.
|
|
936
|
+
*
|
|
937
|
+
* This function converts an IREP into a C source file. The generated file
|
|
938
|
+
* will contain a `uint8_t` array holding the binary representation of the IREP.
|
|
939
|
+
*
|
|
940
|
+
* @param mrb The mruby state.
|
|
941
|
+
* @param irep The IREP to dump.
|
|
942
|
+
* @param flags Flags to control the dump process (e.g., `MRB_DUMP_STATIC` to
|
|
943
|
+
* make the array static).
|
|
944
|
+
* @param fp The file pointer to write the C source code to.
|
|
945
|
+
* @param initname The name of the `uint8_t` array in the generated C code.
|
|
946
|
+
*
|
|
947
|
+
* @return MRB_DUMP_OK on success, or an error code (e.g.,
|
|
948
|
+
* `MRB_DUMP_INVALID_ARGUMENT`, `MRB_DUMP_WRITE_FAULT`) on failure.
|
|
949
|
+
*/
|
|
950
|
+
int
|
|
951
|
+
mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname)
|
|
952
|
+
{
|
|
953
|
+
uint8_t *bin = NULL;
|
|
954
|
+
|
|
955
|
+
if (fp == NULL || initname == NULL || initname[0] == '\0') {
|
|
956
|
+
return MRB_DUMP_INVALID_ARGUMENT;
|
|
957
|
+
}
|
|
958
|
+
size_t bin_size, bin_idx = 0;
|
|
959
|
+
int result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
|
|
960
|
+
if (result == MRB_DUMP_OK) {
|
|
961
|
+
if (fprintf(fp, "#include <stdint.h>\n") < 0) { /* for uint8_t under at least Darwin */
|
|
962
|
+
mrb_free(mrb, bin);
|
|
963
|
+
return MRB_DUMP_WRITE_FAULT;
|
|
964
|
+
}
|
|
965
|
+
if (fprintf(fp,
|
|
966
|
+
"%s\n"
|
|
967
|
+
"const uint8_t %s[] = {",
|
|
968
|
+
(flags & MRB_DUMP_STATIC) ? "static"
|
|
969
|
+
: "#ifdef __cplusplus\n"
|
|
970
|
+
"extern\n"
|
|
971
|
+
"#endif",
|
|
972
|
+
initname) < 0) {
|
|
973
|
+
mrb_free(mrb, bin);
|
|
974
|
+
return MRB_DUMP_WRITE_FAULT;
|
|
975
|
+
}
|
|
976
|
+
while (bin_idx < bin_size) {
|
|
977
|
+
if (bin_idx % 16 == 0) {
|
|
978
|
+
if (fputs("\n", fp) == EOF) {
|
|
979
|
+
mrb_free(mrb, bin);
|
|
980
|
+
return MRB_DUMP_WRITE_FAULT;
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
if (fprintf(fp, "0x%02x,", bin[bin_idx++]) < 0) {
|
|
984
|
+
mrb_free(mrb, bin);
|
|
985
|
+
return MRB_DUMP_WRITE_FAULT;
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
if (fputs("\n};\n", fp) == EOF) {
|
|
989
|
+
mrb_free(mrb, bin);
|
|
990
|
+
return MRB_DUMP_WRITE_FAULT;
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
mrb_free(mrb, bin);
|
|
995
|
+
return result;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
#endif /* MRB_NO_STDIO */
|