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,65 @@
|
|
|
1
|
+
# Task Inspection Example
|
|
2
|
+
# Demonstrates task status and inspect methods
|
|
3
|
+
|
|
4
|
+
puts "=== Task Inspection Demo ==="
|
|
5
|
+
puts
|
|
6
|
+
|
|
7
|
+
# Create some tasks
|
|
8
|
+
worker1 = Task.new(name: "worker-1") do
|
|
9
|
+
puts "Worker 1: Starting"
|
|
10
|
+
puts "Worker 1: My status is #{Task.current.status}"
|
|
11
|
+
puts "Worker 1: My inspect is #{Task.current.inspect}"
|
|
12
|
+
sleep 0.5
|
|
13
|
+
puts "Worker 1: Finished"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
worker2 = Task.new(name: "worker-2") do
|
|
17
|
+
sleep 1
|
|
18
|
+
puts "Worker 2: Finished"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Inspect before running
|
|
22
|
+
puts "Initial task states:"
|
|
23
|
+
puts " worker1: #{worker1.inspect}"
|
|
24
|
+
puts " status=#{worker1.status}"
|
|
25
|
+
puts " worker2: #{worker2.inspect}"
|
|
26
|
+
puts " status=#{worker2.status}"
|
|
27
|
+
puts
|
|
28
|
+
|
|
29
|
+
# Create an observer task
|
|
30
|
+
observer = Task.new(name: "observer") do
|
|
31
|
+
sleep 0.2
|
|
32
|
+
|
|
33
|
+
puts "\nObserver checking task states:"
|
|
34
|
+
puts " worker1: #{worker1.inspect}"
|
|
35
|
+
puts " status=#{worker1.status}"
|
|
36
|
+
puts " worker2: #{worker2.inspect}"
|
|
37
|
+
puts " status=#{worker2.status}"
|
|
38
|
+
|
|
39
|
+
sleep 0.5
|
|
40
|
+
|
|
41
|
+
# Suspend worker2
|
|
42
|
+
worker2.suspend
|
|
43
|
+
puts "\nObserver suspended worker2:"
|
|
44
|
+
puts " worker2: #{worker2.inspect}"
|
|
45
|
+
puts " status=#{worker2.status}"
|
|
46
|
+
|
|
47
|
+
sleep 0.3
|
|
48
|
+
|
|
49
|
+
# Resume and terminate
|
|
50
|
+
worker2.resume
|
|
51
|
+
sleep 0.1
|
|
52
|
+
worker2.terminate
|
|
53
|
+
|
|
54
|
+
puts "\nObserver terminated worker2:"
|
|
55
|
+
puts " worker2: #{worker2.inspect}"
|
|
56
|
+
puts " status=#{worker2.status}"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Run the scheduler
|
|
60
|
+
Task.run
|
|
61
|
+
|
|
62
|
+
puts "\n=== Final states ==="
|
|
63
|
+
puts " worker1: #{worker1.inspect} status=#{worker1.status}"
|
|
64
|
+
puts " worker2: #{worker2.inspect} status=#{worker2.status}"
|
|
65
|
+
puts " observer: #{observer.inspect} status=#{observer.status}"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Priority Scheduling Example
|
|
2
|
+
# Lower priority values = higher priority (0 is highest)
|
|
3
|
+
|
|
4
|
+
puts "=== Priority Scheduling Demo ==="
|
|
5
|
+
puts
|
|
6
|
+
|
|
7
|
+
# Create tasks with different priorities
|
|
8
|
+
low_priority = Task.new(name: "low-priority", priority: 200) do
|
|
9
|
+
5.times do |i|
|
|
10
|
+
puts " [Low Priority] iteration #{i}"
|
|
11
|
+
sleep 0.1
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
high_priority = Task.new(name: "high-priority", priority: 50) do
|
|
16
|
+
5.times do |i|
|
|
17
|
+
puts "[High Priority] iteration #{i}"
|
|
18
|
+
sleep 0.1
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
medium_priority = Task.new(name: "medium-priority", priority: 128) do
|
|
23
|
+
5.times do |i|
|
|
24
|
+
puts " [Medium Priority] iteration #{i}"
|
|
25
|
+
sleep 0.1
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
puts "Created 3 tasks with different priorities:"
|
|
30
|
+
puts " High: priority=50"
|
|
31
|
+
puts " Medium: priority=128"
|
|
32
|
+
puts " Low: priority=200"
|
|
33
|
+
puts
|
|
34
|
+
puts "Tasks will run in priority order (highest first)"
|
|
35
|
+
puts
|
|
36
|
+
|
|
37
|
+
# Run the scheduler
|
|
38
|
+
Task.run
|
|
39
|
+
|
|
40
|
+
puts
|
|
41
|
+
puts "=== All tasks completed ==="
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Producer/Consumer Example
|
|
2
|
+
# Demonstrates task coordination using shared state
|
|
3
|
+
|
|
4
|
+
puts "=== Producer/Consumer Demo ==="
|
|
5
|
+
puts
|
|
6
|
+
|
|
7
|
+
# Shared buffer
|
|
8
|
+
$buffer = []
|
|
9
|
+
$max_items = 10
|
|
10
|
+
$produced = 0
|
|
11
|
+
|
|
12
|
+
# Producer task
|
|
13
|
+
producer = Task.new(name: "producer") do
|
|
14
|
+
$max_items.times do |i|
|
|
15
|
+
# Produce an item
|
|
16
|
+
item = "item-#{i}"
|
|
17
|
+
$buffer << item
|
|
18
|
+
$produced += 1
|
|
19
|
+
puts "Producer: created #{item} (buffer size: #{$buffer.size})"
|
|
20
|
+
|
|
21
|
+
sleep 0.3
|
|
22
|
+
end
|
|
23
|
+
puts "Producer: finished producing #{$max_items} items"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Consumer task
|
|
27
|
+
consumer = Task.new(name: "consumer") do
|
|
28
|
+
consumed = 0
|
|
29
|
+
|
|
30
|
+
while consumed < $max_items
|
|
31
|
+
if $buffer.empty?
|
|
32
|
+
puts "Consumer: buffer empty, waiting..."
|
|
33
|
+
sleep 0.2
|
|
34
|
+
else
|
|
35
|
+
item = $buffer.shift
|
|
36
|
+
consumed += 1
|
|
37
|
+
puts "Consumer: consumed #{item} (#{consumed}/#{$max_items})"
|
|
38
|
+
sleep 0.5
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
puts "Consumer: finished consuming #{consumed} items"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Monitor task
|
|
46
|
+
monitor = Task.new(name: "monitor") do
|
|
47
|
+
loop do
|
|
48
|
+
sleep 1
|
|
49
|
+
puts "Monitor: produced=#{$produced}, buffer=#{$buffer.size}, remaining=#{$max_items - $produced}"
|
|
50
|
+
break if $produced >= $max_items && $buffer.empty?
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Run the scheduler
|
|
55
|
+
Task.run
|
|
56
|
+
|
|
57
|
+
puts "\n=== All tasks completed ==="
|
|
58
|
+
puts "Final state: produced=#{$produced}, buffer=#{$buffer.size}"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Simple Task Example
|
|
2
|
+
# Basic usage of mruby-task
|
|
3
|
+
|
|
4
|
+
puts "=== Simple Task Demo ==="
|
|
5
|
+
puts
|
|
6
|
+
|
|
7
|
+
# Create a simple task
|
|
8
|
+
Task.new(name: "hello") do
|
|
9
|
+
3.times do |i|
|
|
10
|
+
puts "Hello from task, iteration #{i}"
|
|
11
|
+
sleep 0.5
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Create another task
|
|
16
|
+
Task.new(name: "world") do
|
|
17
|
+
3.times do |i|
|
|
18
|
+
puts "World from task, iteration #{i}"
|
|
19
|
+
sleep 0.7
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Run the scheduler - blocks until all tasks complete
|
|
24
|
+
puts "Starting tasks..."
|
|
25
|
+
Task.run
|
|
26
|
+
|
|
27
|
+
puts "All tasks completed!"
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Task Statistics Example
|
|
2
|
+
# Demonstrates Task.stat for monitoring scheduler state
|
|
3
|
+
|
|
4
|
+
def print_stats(label)
|
|
5
|
+
stat = Task.stat
|
|
6
|
+
puts "\n#{label}"
|
|
7
|
+
puts " Tick: #{stat[:tick]}, Next wakeup: #{stat[:wakeup_tick]}"
|
|
8
|
+
puts " Ready: #{stat[:ready][:count]} tasks"
|
|
9
|
+
puts " Waiting: #{stat[:waiting][:count]} tasks"
|
|
10
|
+
puts " Suspended: #{stat[:suspended][:count]} tasks"
|
|
11
|
+
puts " Dormant: #{stat[:dormant][:count]} tasks"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
puts "=== Task Statistics Demo ==="
|
|
15
|
+
|
|
16
|
+
print_stats("Initial state:")
|
|
17
|
+
|
|
18
|
+
# Create several tasks
|
|
19
|
+
workers = []
|
|
20
|
+
5.times do |i|
|
|
21
|
+
workers << Task.new(name: "worker-#{i}") do
|
|
22
|
+
sleep 0.5
|
|
23
|
+
puts "Worker #{i} completed"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
print_stats("After creating 5 tasks:")
|
|
28
|
+
|
|
29
|
+
# Create a monitor task
|
|
30
|
+
monitor = Task.new(name: "monitor") do
|
|
31
|
+
sleep 0.1
|
|
32
|
+
print_stats("Monitor: After 0.1s:")
|
|
33
|
+
|
|
34
|
+
# Suspend a couple tasks
|
|
35
|
+
workers[2].suspend
|
|
36
|
+
workers[3].suspend
|
|
37
|
+
|
|
38
|
+
print_stats("Monitor: After suspending 2 tasks:")
|
|
39
|
+
|
|
40
|
+
sleep 0.5
|
|
41
|
+
|
|
42
|
+
print_stats("Monitor: After 0.5s more:")
|
|
43
|
+
|
|
44
|
+
# Resume suspended tasks
|
|
45
|
+
workers[2].resume
|
|
46
|
+
workers[3].resume
|
|
47
|
+
|
|
48
|
+
print_stats("Monitor: After resuming tasks:")
|
|
49
|
+
|
|
50
|
+
# Wait for all workers
|
|
51
|
+
workers.each(&:join)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Run the scheduler
|
|
55
|
+
Task.run
|
|
56
|
+
|
|
57
|
+
print_stats("Final state:")
|
|
58
|
+
|
|
59
|
+
puts "\n=== Demo complete ==="
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Suspend and Resume Example
|
|
2
|
+
# Demonstrates manual task control
|
|
3
|
+
|
|
4
|
+
puts "=== Suspend/Resume Demo ==="
|
|
5
|
+
puts
|
|
6
|
+
|
|
7
|
+
$counter = 0
|
|
8
|
+
|
|
9
|
+
# Create a worker task
|
|
10
|
+
worker = Task.new(name: "worker") do
|
|
11
|
+
10.times do |i|
|
|
12
|
+
puts "Worker: iteration #{i}, counter=#{$counter}"
|
|
13
|
+
$counter += 1
|
|
14
|
+
sleep 0.2
|
|
15
|
+
end
|
|
16
|
+
puts "Worker: finished!"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Create a controller task
|
|
20
|
+
controller = Task.new(name: "controller") do
|
|
21
|
+
sleep 0.5
|
|
22
|
+
|
|
23
|
+
puts "\nController: Suspending worker..."
|
|
24
|
+
worker.suspend
|
|
25
|
+
puts "Controller: Worker status = #{worker.status}"
|
|
26
|
+
|
|
27
|
+
sleep 1
|
|
28
|
+
|
|
29
|
+
puts "\nController: Incrementing counter while worker is suspended..."
|
|
30
|
+
5.times do
|
|
31
|
+
$counter += 10
|
|
32
|
+
puts "Controller: counter=#{$counter}"
|
|
33
|
+
sleep 0.2
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
puts "\nController: Resuming worker..."
|
|
37
|
+
worker.resume
|
|
38
|
+
puts "Controller: Worker status = #{worker.status}"
|
|
39
|
+
|
|
40
|
+
# Wait for worker to finish
|
|
41
|
+
worker.join
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Run the scheduler
|
|
45
|
+
Task.run
|
|
46
|
+
|
|
47
|
+
puts "\n=== Final counter value: #{$counter} ==="
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
$global = 0
|
|
2
|
+
task = Task.new do
|
|
3
|
+
10.times do |i|
|
|
4
|
+
puts "Task #{i} is running"
|
|
5
|
+
$global += 1
|
|
6
|
+
sleep 1
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
while true
|
|
11
|
+
sleep 0.5
|
|
12
|
+
if $global < 6
|
|
13
|
+
puts "Global variable is less than 6, waiting..."
|
|
14
|
+
Task.pass
|
|
15
|
+
else
|
|
16
|
+
break
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
puts "Global variable reached 6, exiting loop"
|
|
21
|
+
Task.run
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** task.h - Task scheduler
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef MRUBY_TASK_H
|
|
8
|
+
#define MRUBY_TASK_H
|
|
9
|
+
|
|
10
|
+
#include <mruby.h>
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* Task status values (bit-mapped)
|
|
14
|
+
*/
|
|
15
|
+
enum {
|
|
16
|
+
MRB_TASK_STATUS_DORMANT = 0x00, /* Not started or finished */
|
|
17
|
+
MRB_TASK_STATUS_READY = 0x02, /* Ready to run */
|
|
18
|
+
MRB_TASK_STATUS_RUNNING = 0x03, /* Currently executing */
|
|
19
|
+
MRB_TASK_STATUS_WAITING = 0x04, /* Waiting for condition */
|
|
20
|
+
MRB_TASK_STATUS_SUSPENDED = 0x08, /* Manually suspended */
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* Task wait reason
|
|
25
|
+
*/
|
|
26
|
+
enum {
|
|
27
|
+
MRB_TASK_REASON_NONE = 0x00, /* No specific reason */
|
|
28
|
+
MRB_TASK_REASON_SLEEP = 0x01, /* Sleeping for time */
|
|
29
|
+
MRB_TASK_REASON_MUTEX = 0x02, /* Waiting for mutex (reserved) */
|
|
30
|
+
MRB_TASK_REASON_JOIN = 0x04, /* Waiting for another task */
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Task structure - represents a single task in the scheduler
|
|
35
|
+
*
|
|
36
|
+
* Memory-optimized layout:
|
|
37
|
+
* - Removed priority_preemption (always equals priority): 1 byte
|
|
38
|
+
* - Removed started flag (inferred from c.status): 1 byte
|
|
39
|
+
* - Unified wakeup_tick/join/mutex into single union: 4 bytes
|
|
40
|
+
* - Removed redundant proc field (stored in c.ci->proc): 8 bytes
|
|
41
|
+
* - Unified timeslice/result into state union: ~4 bytes
|
|
42
|
+
* Total savings: ~18 bytes per task (14% reduction)
|
|
43
|
+
*/
|
|
44
|
+
typedef struct mrb_task {
|
|
45
|
+
struct mrb_task *next; /* Linked list pointer */
|
|
46
|
+
uint8_t priority; /* Priority (0-255, 0=highest) */
|
|
47
|
+
uint8_t status; /* Current status (TASKSTATUS enum) */
|
|
48
|
+
uint8_t reason; /* Wait reason (TASKREASON enum) */
|
|
49
|
+
mrb_value name; /* Optional task name */
|
|
50
|
+
|
|
51
|
+
/* Wait-specific data - mutually exclusive based on reason field */
|
|
52
|
+
union {
|
|
53
|
+
uint32_t wakeup_tick; /* Tick count to wake up (REASON_SLEEP) */
|
|
54
|
+
const struct mrb_task *join; /* Task being waited on (REASON_JOIN) */
|
|
55
|
+
void *mutex; /* Mutex pointer (REASON_MUTEX, reserved) */
|
|
56
|
+
} wait;
|
|
57
|
+
|
|
58
|
+
mrb_value self; /* Ruby Task object reference */
|
|
59
|
+
|
|
60
|
+
/* State-specific data - mutually exclusive based on status */
|
|
61
|
+
union {
|
|
62
|
+
volatile uint8_t timeslice; /* Remaining ticks (RUNNING only) */
|
|
63
|
+
mrb_value result; /* Task return value (DORMANT only) */
|
|
64
|
+
} state;
|
|
65
|
+
|
|
66
|
+
struct mrb_context c; /* Execution context (stack, callinfo, etc) */
|
|
67
|
+
} mrb_task;
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* Task queue configuration
|
|
71
|
+
* (mrb_task_state is defined in mruby.h)
|
|
72
|
+
*/
|
|
73
|
+
#define MRB_NUM_TASK_QUEUE 4
|
|
74
|
+
|
|
75
|
+
/* Queue indices */
|
|
76
|
+
#define MRB_TASK_QUEUE_DORMANT 0
|
|
77
|
+
#define MRB_TASK_QUEUE_READY 1
|
|
78
|
+
#define MRB_TASK_QUEUE_WAITING 2
|
|
79
|
+
#define MRB_TASK_QUEUE_SUSPENDED 3
|
|
80
|
+
|
|
81
|
+
/* Configuration */
|
|
82
|
+
#ifndef MRB_TICK_UNIT
|
|
83
|
+
#define MRB_TICK_UNIT 4 /* Tick period in milliseconds */
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
#ifndef MRB_TIMESLICE_TICK_COUNT
|
|
87
|
+
#define MRB_TIMESLICE_TICK_COUNT 3 /* Number of ticks per timeslice */
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
#define TASK_STACK_INIT_SIZE 64 /* Initial task stack size */
|
|
91
|
+
#define TASK_CI_INIT_SIZE 4 /* Initial task callinfo size */
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* HAL (Hardware Abstraction Layer) functions
|
|
95
|
+
* Platform-specific implementations must provide these
|
|
96
|
+
*/
|
|
97
|
+
void mrb_task_hal_init(mrb_state *mrb);
|
|
98
|
+
void mrb_task_hal_final(mrb_state *mrb);
|
|
99
|
+
void mrb_task_enable_irq(void);
|
|
100
|
+
void mrb_task_disable_irq(void);
|
|
101
|
+
void mrb_task_hal_idle_cpu(mrb_state *mrb);
|
|
102
|
+
|
|
103
|
+
/*
|
|
104
|
+
* GC integration
|
|
105
|
+
*/
|
|
106
|
+
void mrb_task_mark_all(mrb_state *mrb);
|
|
107
|
+
|
|
108
|
+
/*
|
|
109
|
+
* Core task scheduler API
|
|
110
|
+
*/
|
|
111
|
+
MRB_API void mrb_tick(mrb_state *mrb);
|
|
112
|
+
MRB_API mrb_value mrb_task_run(mrb_state *mrb);
|
|
113
|
+
MRB_API mrb_value mrb_task_run_once(mrb_state *mrb);
|
|
114
|
+
|
|
115
|
+
/*
|
|
116
|
+
* Task creation API
|
|
117
|
+
*/
|
|
118
|
+
MRB_API mrb_value mrb_create_task(mrb_state *mrb, struct RProc *proc, mrb_value name, mrb_value priority, mrb_value top_self);
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
* Synchronous execution API (for picoruby-wasm)
|
|
122
|
+
*/
|
|
123
|
+
MRB_API mrb_value mrb_execute_proc_synchronously(mrb_state *mrb, mrb_value proc, mrb_int argc, const mrb_value *argv);
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* Task control API
|
|
127
|
+
* Note: mrb_task_run is the main scheduler loop (for picoruby-sandbox and picoruby-wasm)
|
|
128
|
+
*/
|
|
129
|
+
MRB_API void mrb_suspend_task(mrb_state *mrb, mrb_value task);
|
|
130
|
+
MRB_API void mrb_resume_task(mrb_state *mrb, mrb_value task);
|
|
131
|
+
MRB_API void mrb_terminate_task(mrb_state *mrb, mrb_value task);
|
|
132
|
+
MRB_API mrb_bool mrb_stop_task(mrb_state *mrb, mrb_value task);
|
|
133
|
+
MRB_API mrb_value mrb_task_value(mrb_state *mrb, mrb_value task);
|
|
134
|
+
MRB_API mrb_value mrb_task_status(mrb_state *mrb, mrb_value self);
|
|
135
|
+
|
|
136
|
+
/*
|
|
137
|
+
* Task context management API (for picoruby-sandbox)
|
|
138
|
+
*/
|
|
139
|
+
MRB_API void mrb_task_init_context(mrb_state *mrb, mrb_value task, struct RProc *proc);
|
|
140
|
+
MRB_API void mrb_task_reset_context(mrb_state *mrb, mrb_value task);
|
|
141
|
+
MRB_API void mrb_task_proc_set(mrb_state *mrb, mrb_value task, struct RProc *proc);
|
|
142
|
+
|
|
143
|
+
#endif /* MRUBY_TASK_H */
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** task_hal.h - Task scheduler Hardware Abstraction Layer (HAL)
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
**
|
|
6
|
+
** This header defines the HAL interface that platform-specific implementations
|
|
7
|
+
** must provide. The HAL separates platform-specific timer and interrupt handling
|
|
8
|
+
** from the core task scheduler logic.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#ifndef MRUBY_TASK_HAL_H
|
|
12
|
+
#define MRUBY_TASK_HAL_H
|
|
13
|
+
|
|
14
|
+
#include <mruby.h>
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* Configuration - can be overridden in platform-specific build configs
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/* Tick period in milliseconds - how often the timer fires */
|
|
21
|
+
#ifndef MRB_TICK_UNIT
|
|
22
|
+
#define MRB_TICK_UNIT 4
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
/* Number of timer ticks per task timeslice */
|
|
26
|
+
#ifndef MRB_TIMESLICE_TICK_COUNT
|
|
27
|
+
#define MRB_TIMESLICE_TICK_COUNT 3
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
/* Maximum number of concurrent mrb_state instances with task scheduler */
|
|
31
|
+
#ifndef MRB_TASK_MAX_VMS
|
|
32
|
+
#define MRB_TASK_MAX_VMS 8
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* HAL Interface Functions
|
|
37
|
+
*
|
|
38
|
+
* Platform-specific implementations (hal-posix-task, hal-win-task, etc.)
|
|
39
|
+
* must provide these functions.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Initialize hardware timer and interrupt system
|
|
44
|
+
*
|
|
45
|
+
* Called once during mruby-task gem initialization. Should set up a periodic
|
|
46
|
+
* timer that calls mrb_tick(mrb) every MRB_TICK_UNIT milliseconds.
|
|
47
|
+
*
|
|
48
|
+
* Requirements:
|
|
49
|
+
* - Initialize platform-specific timer hardware/APIs
|
|
50
|
+
* - Set up timer to fire every MRB_TICK_UNIT milliseconds
|
|
51
|
+
* - Register mrb_state for multi-VM support if needed
|
|
52
|
+
* - Initialize interrupt protection mechanisms (mutexes, signal masks, etc.)
|
|
53
|
+
* - Timer should call mrb_tick() on each tick for all registered VMs
|
|
54
|
+
*
|
|
55
|
+
* @param mrb The mruby state to associate with the timer
|
|
56
|
+
*/
|
|
57
|
+
void mrb_hal_task_init(mrb_state *mrb);
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Cleanup timer and interrupt resources
|
|
61
|
+
*
|
|
62
|
+
* Called during mruby-task gem finalization. Should clean up all resources
|
|
63
|
+
* allocated by mrb_hal_task_init().
|
|
64
|
+
*
|
|
65
|
+
* Requirements:
|
|
66
|
+
* - Stop and cleanup platform timer
|
|
67
|
+
* - Unregister mrb_state from multi-VM support
|
|
68
|
+
* - Free any allocated HAL resources
|
|
69
|
+
* - If last VM, cleanup global HAL state
|
|
70
|
+
*
|
|
71
|
+
* @param mrb The mruby state to disassociate from the timer
|
|
72
|
+
*/
|
|
73
|
+
void mrb_hal_task_final(mrb_state *mrb);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Enable timer interrupts (exit critical section)
|
|
77
|
+
*
|
|
78
|
+
* Called by the task scheduler when it's safe to allow timer interrupts.
|
|
79
|
+
* Should enable timer interrupts/callbacks that were disabled by
|
|
80
|
+
* mrb_task_disable_irq().
|
|
81
|
+
*
|
|
82
|
+
* Requirements:
|
|
83
|
+
* - Must be reentrant (can be called multiple times)
|
|
84
|
+
* - Should use nesting counter or equivalent for nested critical sections
|
|
85
|
+
* - On POSIX: unmask signals
|
|
86
|
+
* - On Windows: leave critical section
|
|
87
|
+
* - On embedded: enable timer interrupts
|
|
88
|
+
*/
|
|
89
|
+
void mrb_task_enable_irq(void);
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Disable timer interrupts (enter critical section)
|
|
93
|
+
*
|
|
94
|
+
* Called by the task scheduler before modifying shared task state.
|
|
95
|
+
* Should disable timer interrupts/callbacks to prevent concurrent access.
|
|
96
|
+
*
|
|
97
|
+
* Requirements:
|
|
98
|
+
* - Must be reentrant (can be called multiple times)
|
|
99
|
+
* - Should use nesting counter or equivalent for nested critical sections
|
|
100
|
+
* - On POSIX: block signals
|
|
101
|
+
* - On Windows: enter critical section
|
|
102
|
+
* - On embedded: disable timer interrupts
|
|
103
|
+
*/
|
|
104
|
+
void mrb_task_disable_irq(void);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Put CPU in low-power/idle mode
|
|
108
|
+
*
|
|
109
|
+
* Called by the scheduler when no tasks are ready to run but some tasks
|
|
110
|
+
* are waiting or suspended. Should briefly idle the CPU or sleep for
|
|
111
|
+
* approximately MRB_TICK_UNIT milliseconds to allow timer to fire.
|
|
112
|
+
*
|
|
113
|
+
* Requirements:
|
|
114
|
+
* - Should return when timer fires or after ~MRB_TICK_UNIT milliseconds
|
|
115
|
+
* - Must allow timer interrupts to occur during idle
|
|
116
|
+
* - On POSIX: usleep() or nanosleep()
|
|
117
|
+
* - On Windows: Sleep()
|
|
118
|
+
* - On embedded: platform-specific sleep/wait-for-interrupt instruction
|
|
119
|
+
*
|
|
120
|
+
* @param mrb The mruby state (for context, may be unused)
|
|
121
|
+
*/
|
|
122
|
+
void mrb_hal_task_idle_cpu(mrb_state *mrb);
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Sleep for specified microseconds in wall-clock time
|
|
126
|
+
*
|
|
127
|
+
* Called by sleep functions when in root context (not in a task).
|
|
128
|
+
* Should sleep for the specified number of microseconds in real wall-clock
|
|
129
|
+
* time, allowing timer interrupts to occur during the sleep.
|
|
130
|
+
*
|
|
131
|
+
* Requirements:
|
|
132
|
+
* - Sleep for approximately usec microseconds in wall-clock time
|
|
133
|
+
* - Must allow timer interrupts/callbacks during sleep
|
|
134
|
+
* - Should handle interruptions gracefully and complete full sleep duration
|
|
135
|
+
* - On POSIX: use clock_gettime + nanosleep loop for accuracy
|
|
136
|
+
* - On Windows: use Sleep() with millisecond conversion
|
|
137
|
+
* - On embedded: platform-specific delay with interrupt support
|
|
138
|
+
*
|
|
139
|
+
* @param mrb The mruby state (for context, may be unused)
|
|
140
|
+
* @param usec Number of microseconds to sleep
|
|
141
|
+
*/
|
|
142
|
+
void mrb_hal_task_sleep_us(mrb_state *mrb, mrb_int usec);
|
|
143
|
+
|
|
144
|
+
/*
|
|
145
|
+
* Core scheduler function (implemented in task.c, called by HAL)
|
|
146
|
+
*/
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Tick handler - advances scheduler time and wakes sleeping tasks
|
|
150
|
+
*
|
|
151
|
+
* HAL timer callback must call this function every MRB_TICK_UNIT milliseconds
|
|
152
|
+
* for each registered mrb_state. This function:
|
|
153
|
+
* - Increments the global tick counter
|
|
154
|
+
* - Decrements running task's timeslice
|
|
155
|
+
* - Wakes tasks whose sleep time has expired
|
|
156
|
+
* - Triggers context switches when needed
|
|
157
|
+
*
|
|
158
|
+
* @param mrb The mruby state to tick
|
|
159
|
+
*/
|
|
160
|
+
void mrb_tick(mrb_state *mrb);
|
|
161
|
+
|
|
162
|
+
#endif /* MRUBY_TASK_HAL_H */
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
MRuby::Gem::Specification.new('mruby-task') do |spec|
|
|
2
|
+
spec.license = 'MIT'
|
|
3
|
+
spec.authors = 'mruby developers'
|
|
4
|
+
spec.summary = 'Cooperative multitasking with preemptive scheduling'
|
|
5
|
+
|
|
6
|
+
# Enable task scheduler globally (required for vm.c integration)
|
|
7
|
+
spec.build.defines << 'MRB_USE_TASK_SCHEDULER'
|
|
8
|
+
|
|
9
|
+
# Check if HAL gem is loaded
|
|
10
|
+
# HAL gems must be explicitly specified in build config (recommended) or via auto-selection below
|
|
11
|
+
spec.build.gems.one? { |g| g.name =~ /^hal-.*-task$/ } or begin
|
|
12
|
+
# No HAL found - determine appropriate error message or auto-load
|
|
13
|
+
suggested_hal = if spec.for_windows?
|
|
14
|
+
# Windows (including MinGW) - use Windows HAL
|
|
15
|
+
'hal-win-task'
|
|
16
|
+
elsif RUBY_PLATFORM =~ /linux|darwin|bsd/
|
|
17
|
+
'hal-posix-task'
|
|
18
|
+
else
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
if suggested_hal
|
|
23
|
+
# Auto-load HAL gem for convenience (for development)
|
|
24
|
+
# This works because HAL gems declare dependency on mruby-task
|
|
25
|
+
warn "mruby-task: No HAL specified, loading #{suggested_hal} (explicit selection recommended)"
|
|
26
|
+
spec.build.gem core: suggested_hal
|
|
27
|
+
else
|
|
28
|
+
# Unknown platform - fail with helpful message
|
|
29
|
+
fail "mruby-task: No HAL available for platform '#{RUBY_PLATFORM}'.\n" \
|
|
30
|
+
"Please specify HAL gem explicitly in your build config:\n" \
|
|
31
|
+
" conf.gem core: 'hal-posix-task' # For Linux/macOS/BSD\n" \
|
|
32
|
+
" conf.gem core: 'hal-win-task' # For Windows\n" \
|
|
33
|
+
"Or create custom HAL - see mrbgems/mruby-task/README.md"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|