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,1023 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** symbol.c - Symbol class
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#include <string.h>
|
|
8
|
+
#include <mruby.h>
|
|
9
|
+
#include <mruby/string.h>
|
|
10
|
+
#include <mruby/dump.h>
|
|
11
|
+
#include <mruby/class.h>
|
|
12
|
+
#include <mruby/internal.h>
|
|
13
|
+
#include <mruby/presym.h>
|
|
14
|
+
|
|
15
|
+
#ifndef MRB_PRESYM_SCANNING
|
|
16
|
+
/* const uint16_t presym_length_table[] */
|
|
17
|
+
/* const char * const presym_name_table[] */
|
|
18
|
+
# include <mruby/presym/table.h>
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
static mrb_sym
|
|
22
|
+
presym_find(const char *name, size_t len)
|
|
23
|
+
{
|
|
24
|
+
if (presym_length_table[MRB_PRESYM_MAX-1] < len) return 0;
|
|
25
|
+
|
|
26
|
+
mrb_sym presym_size = MRB_PRESYM_MAX;
|
|
27
|
+
for (mrb_sym start = 0; presym_size != 0; presym_size/=2) {
|
|
28
|
+
mrb_sym idx = start+presym_size/2;
|
|
29
|
+
int cmp = (int)len-(int)presym_length_table[idx];
|
|
30
|
+
if (cmp == 0) {
|
|
31
|
+
cmp = memcmp(name, presym_name_table[idx], len);
|
|
32
|
+
if (cmp == 0) return idx+1;
|
|
33
|
+
}
|
|
34
|
+
if (0 < cmp) {
|
|
35
|
+
start = ++idx;
|
|
36
|
+
--presym_size;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static const char*
|
|
43
|
+
presym_sym2name(mrb_sym sym, mrb_int *lenp)
|
|
44
|
+
{
|
|
45
|
+
if (sym > MRB_PRESYM_MAX) return NULL;
|
|
46
|
+
if (lenp) *lenp = presym_length_table[sym-1];
|
|
47
|
+
return presym_name_table[sym-1];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* ------------------------------------------------------ */
|
|
51
|
+
|
|
52
|
+
/* LSB pointer tagging for literal flags */
|
|
53
|
+
#define SYMTBL_LITERAL_FLAG ((uintptr_t)1)
|
|
54
|
+
|
|
55
|
+
/* Extract clean pointer for memory operations */
|
|
56
|
+
static inline const char*
|
|
57
|
+
symtbl_get_ptr(const char *tagged_ptr)
|
|
58
|
+
{
|
|
59
|
+
return (const char*)((uintptr_t)tagged_ptr & ~SYMTBL_LITERAL_FLAG);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Check if symbol is literal by testing LSB */
|
|
63
|
+
static inline mrb_bool
|
|
64
|
+
symtbl_is_literal(const char *tagged_ptr)
|
|
65
|
+
{
|
|
66
|
+
return ((uintptr_t)tagged_ptr & SYMTBL_LITERAL_FLAG) != 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Create tagged pointer for literal string - with alignment verification */
|
|
70
|
+
static inline const char*
|
|
71
|
+
symtbl_tag_literal(const char *ptr)
|
|
72
|
+
{
|
|
73
|
+
mrb_assert(((uintptr_t)ptr & 1) == 0); /* Assert alignment */
|
|
74
|
+
return (const char*)((uintptr_t)ptr | SYMTBL_LITERAL_FLAG);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static void
|
|
78
|
+
sym_validate_len(mrb_state *mrb, size_t len)
|
|
79
|
+
{
|
|
80
|
+
if (len >= UINT16_MAX) {
|
|
81
|
+
mrb_raise(mrb, E_ARGUMENT_ERROR, "symbol length too long");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* Chunk-based string pool for heap-allocated symbol names */
|
|
86
|
+
#define MRB_SYM_POOL_CHUNK_SIZE 4096
|
|
87
|
+
|
|
88
|
+
struct sym_pool_chunk {
|
|
89
|
+
struct sym_pool_chunk *next;
|
|
90
|
+
size_t used;
|
|
91
|
+
char buf[]; /* flexible array */
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
static char*
|
|
95
|
+
sym_pool_alloc(mrb_state *mrb, size_t size)
|
|
96
|
+
{
|
|
97
|
+
/* round up to even size to keep pointers even-aligned (LSB tagging) */
|
|
98
|
+
size_t asize = (size + 1) & ~(size_t)1;
|
|
99
|
+
struct sym_pool_chunk *chunk = (struct sym_pool_chunk*)mrb->sym_pool;
|
|
100
|
+
if (chunk && chunk->used + asize <= MRB_SYM_POOL_CHUNK_SIZE) {
|
|
101
|
+
char *p = chunk->buf + chunk->used;
|
|
102
|
+
chunk->used += asize;
|
|
103
|
+
return p;
|
|
104
|
+
}
|
|
105
|
+
size_t csize = asize > MRB_SYM_POOL_CHUNK_SIZE ? asize : MRB_SYM_POOL_CHUNK_SIZE;
|
|
106
|
+
chunk = (struct sym_pool_chunk*)mrb_malloc(mrb,
|
|
107
|
+
offsetof(struct sym_pool_chunk, buf) + csize);
|
|
108
|
+
chunk->next = (struct sym_pool_chunk*)mrb->sym_pool;
|
|
109
|
+
chunk->used = asize;
|
|
110
|
+
mrb->sym_pool = (void*)chunk;
|
|
111
|
+
return chunk->buf;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* Hash table for symbols (allocated on demand when symbols exceed threshold) */
|
|
115
|
+
struct mrb_sym_hash_table {
|
|
116
|
+
uint8_t *symlink; /* collision resolution chains */
|
|
117
|
+
mrb_sym buckets[256]; /* hash buckets */
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
#ifdef MRB_USE_ALL_SYMBOLS
|
|
121
|
+
# define SYMBOL_INLINE_P(sym) FALSE
|
|
122
|
+
# define sym_inline_pack(name, len) 0
|
|
123
|
+
# define sym_inline_unpack(sym, buf, lenp) NULL
|
|
124
|
+
#else
|
|
125
|
+
# define SYMBOL_INLINE_P(sym) ((sym) >= (1<<20))
|
|
126
|
+
|
|
127
|
+
static const char pack_table[] = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
128
|
+
|
|
129
|
+
static mrb_sym
|
|
130
|
+
sym_inline_pack(const char *name, size_t len)
|
|
131
|
+
{
|
|
132
|
+
const size_t pack_length_max = 4;
|
|
133
|
+
mrb_sym sym = 0;
|
|
134
|
+
|
|
135
|
+
if (len > pack_length_max) return 0; /* too long */
|
|
136
|
+
if (len == 0) return 0; /* empty string */
|
|
137
|
+
for (size_t i=0; i<len; i++) {
|
|
138
|
+
char c = name[i];
|
|
139
|
+
if (c == 0) return 0; /* NUL in name */
|
|
140
|
+
const char *p = strchr(pack_table, (int)c);
|
|
141
|
+
if (p == 0) return 0; /* non alnum char */
|
|
142
|
+
|
|
143
|
+
uint32_t bits = (uint32_t)(p - pack_table)+1;
|
|
144
|
+
sym |= bits<<(20-i*6);
|
|
145
|
+
}
|
|
146
|
+
mrb_assert(SYMBOL_INLINE_P(sym));
|
|
147
|
+
return sym;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
static const char*
|
|
151
|
+
sym_inline_unpack(mrb_sym sym, char *buf, mrb_int *lenp)
|
|
152
|
+
{
|
|
153
|
+
const size_t pack_length_max = 4;
|
|
154
|
+
size_t i;
|
|
155
|
+
|
|
156
|
+
mrb_assert(SYMBOL_INLINE_P(sym));
|
|
157
|
+
|
|
158
|
+
for (i=0; i<pack_length_max; i++) {
|
|
159
|
+
uint32_t bits = sym>>(20-i*6) & 0x3f;
|
|
160
|
+
if (bits == 0) break;
|
|
161
|
+
buf[i] = pack_table[bits-1];
|
|
162
|
+
}
|
|
163
|
+
buf[i] = '\0';
|
|
164
|
+
if (lenp) *lenp = i;
|
|
165
|
+
return buf;
|
|
166
|
+
}
|
|
167
|
+
#endif
|
|
168
|
+
|
|
169
|
+
/* Check if using hash table mode */
|
|
170
|
+
static inline mrb_bool
|
|
171
|
+
using_hash_table(mrb_state *mrb)
|
|
172
|
+
{
|
|
173
|
+
return mrb->symhash != NULL;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
static mrb_bool
|
|
177
|
+
sym_check(mrb_state *mrb, const char *name, size_t len, mrb_sym i)
|
|
178
|
+
{
|
|
179
|
+
const char *tagged_ptr = mrb->symtbl[i];
|
|
180
|
+
const char *symname = symtbl_get_ptr(tagged_ptr); /* Untag for access */
|
|
181
|
+
size_t symlen;
|
|
182
|
+
|
|
183
|
+
if (symtbl_is_literal(tagged_ptr)) {
|
|
184
|
+
symlen = strlen(symname);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
/* length in BER */
|
|
188
|
+
symlen = mrb_packed_int_decode((const uint8_t*)symname, (const uint8_t**)&symname);
|
|
189
|
+
}
|
|
190
|
+
if (len == symlen && memcmp(symname, name, len) == 0) {
|
|
191
|
+
return TRUE;
|
|
192
|
+
}
|
|
193
|
+
return FALSE;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
static mrb_sym
|
|
197
|
+
find_symbol_linear(mrb_state *mrb, const char *name, size_t len)
|
|
198
|
+
{
|
|
199
|
+
mrb_sym i;
|
|
200
|
+
|
|
201
|
+
for (i = 1; i <= mrb->symidx; i++) {
|
|
202
|
+
if (sym_check(mrb, name, len, i)) {
|
|
203
|
+
return (i + MRB_PRESYM_MAX);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return 0;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
static mrb_sym
|
|
210
|
+
find_symbol_hash(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp)
|
|
211
|
+
{
|
|
212
|
+
mrb_sym i;
|
|
213
|
+
uint8_t hash;
|
|
214
|
+
struct mrb_sym_hash_table *ht = mrb->symhash;
|
|
215
|
+
|
|
216
|
+
hash = mrb_byte_hash((const uint8_t*)name, len);
|
|
217
|
+
if (hashp) *hashp = hash;
|
|
218
|
+
|
|
219
|
+
i = ht->buckets[hash];
|
|
220
|
+
if (i == 0) return 0;
|
|
221
|
+
for (;;) {
|
|
222
|
+
if (sym_check(mrb, name, len, i)) {
|
|
223
|
+
return (i+MRB_PRESYM_MAX);
|
|
224
|
+
}
|
|
225
|
+
uint8_t diff = ht->symlink[i];
|
|
226
|
+
if (diff == 0xff) {
|
|
227
|
+
i -= 0xff;
|
|
228
|
+
while (i > 0) {
|
|
229
|
+
if (sym_check(mrb, name, len, i)) {
|
|
230
|
+
return (i+MRB_PRESYM_MAX);
|
|
231
|
+
}
|
|
232
|
+
i--;
|
|
233
|
+
}
|
|
234
|
+
return 0;
|
|
235
|
+
}
|
|
236
|
+
if (diff == 0) return 0;
|
|
237
|
+
i -= diff;
|
|
238
|
+
}
|
|
239
|
+
return 0;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
static mrb_sym
|
|
243
|
+
find_symbol(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp)
|
|
244
|
+
{
|
|
245
|
+
mrb_sym i;
|
|
246
|
+
|
|
247
|
+
/* presym */
|
|
248
|
+
i = presym_find(name, len);
|
|
249
|
+
if (i > 0) return i;
|
|
250
|
+
|
|
251
|
+
/* inline symbol */
|
|
252
|
+
i = sym_inline_pack(name, len);
|
|
253
|
+
if (i > 0) return i;
|
|
254
|
+
|
|
255
|
+
if (using_hash_table(mrb)) {
|
|
256
|
+
/* Hash table mode - O(1) average case */
|
|
257
|
+
return find_symbol_hash(mrb, name, len, hashp);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
/* Linear mode - O(n) but fast for small n */
|
|
261
|
+
if (hashp) *hashp = mrb_byte_hash((const uint8_t*)name, len);
|
|
262
|
+
return find_symbol_linear(mrb, name, len);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
static void
|
|
267
|
+
migrate_to_hash_table(mrb_state *mrb)
|
|
268
|
+
{
|
|
269
|
+
struct mrb_sym_hash_table *ht;
|
|
270
|
+
mrb_sym i;
|
|
271
|
+
|
|
272
|
+
mrb_assert(mrb->symhash == NULL);
|
|
273
|
+
mrb_assert(mrb->symidx >= MRB_SYMBOL_LINEAR_THRESHOLD);
|
|
274
|
+
|
|
275
|
+
/* Allocate hash table structure */
|
|
276
|
+
ht = (struct mrb_sym_hash_table*)mrb_calloc(mrb, 1, sizeof(struct mrb_sym_hash_table));
|
|
277
|
+
ht->symlink = (uint8_t*)mrb_calloc(mrb, mrb->symcapa, sizeof(uint8_t));
|
|
278
|
+
|
|
279
|
+
/* Rebuild hash table from existing linear data */
|
|
280
|
+
for (i = 1; i <= mrb->symidx; i++) {
|
|
281
|
+
const char *tagged_ptr = mrb->symtbl[i];
|
|
282
|
+
const char *name = symtbl_get_ptr(tagged_ptr);
|
|
283
|
+
size_t len;
|
|
284
|
+
uint8_t hash;
|
|
285
|
+
|
|
286
|
+
/* Get name and length from tagged pointer */
|
|
287
|
+
if (symtbl_is_literal(tagged_ptr)) {
|
|
288
|
+
len = strlen(name);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
/* This is a packed length string */
|
|
292
|
+
len = mrb_packed_int_decode((const uint8_t*)name, (const uint8_t**)&name);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
hash = mrb_byte_hash((const uint8_t*)name, len);
|
|
296
|
+
|
|
297
|
+
/* Build collision chain */
|
|
298
|
+
if (ht->buckets[hash] != 0) {
|
|
299
|
+
mrb_sym diff = i - ht->buckets[hash];
|
|
300
|
+
ht->symlink[i] = (diff > 0xff) ? 0xff : (uint8_t)diff;
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
ht->symlink[i] = 0;
|
|
304
|
+
}
|
|
305
|
+
ht->buckets[hash] = i;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
mrb->symhash = ht;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
static mrb_sym
|
|
312
|
+
sym_intern_common(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
|
|
313
|
+
{
|
|
314
|
+
mrb_sym sym;
|
|
315
|
+
|
|
316
|
+
sym = mrb->symidx + 1;
|
|
317
|
+
if (mrb->symcapa <= sym) {
|
|
318
|
+
size_t symcapa = mrb->symcapa;
|
|
319
|
+
if (symcapa == 0) symcapa = 100;
|
|
320
|
+
else symcapa = (size_t)(symcapa * 6 / 5);
|
|
321
|
+
mrb->symtbl = (const char**)mrb_realloc(mrb, (void*)mrb->symtbl, sizeof(char*)*symcapa);
|
|
322
|
+
if (using_hash_table(mrb)) {
|
|
323
|
+
struct mrb_sym_hash_table *ht = mrb->symhash;
|
|
324
|
+
ht->symlink = (uint8_t*)mrb_realloc(mrb, ht->symlink, symcapa);
|
|
325
|
+
}
|
|
326
|
+
mrb->symcapa = symcapa;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
lit = lit || mrb_ro_data_p(name);
|
|
330
|
+
if (lit && name[len] == 0 && strlen(name) == len) {
|
|
331
|
+
if (((uintptr_t)name & 1) != 0) {
|
|
332
|
+
/* Fallback: unaligned literal, allocate heap copy */
|
|
333
|
+
goto heap_allocation;
|
|
334
|
+
}
|
|
335
|
+
mrb->symtbl[sym] = symtbl_tag_literal(name);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
heap_allocation:;
|
|
339
|
+
/* Always heap-allocate when not explicitly literal */
|
|
340
|
+
uint32_t ulen = (uint32_t)len;
|
|
341
|
+
size_t ilen = mrb_packed_int_len(ulen);
|
|
342
|
+
char *p = sym_pool_alloc(mrb, len+ilen+1);
|
|
343
|
+
mrb_packed_int_encode(ulen, (uint8_t*)p);
|
|
344
|
+
memcpy(p+ilen, name, len);
|
|
345
|
+
p[ilen+len] = 0;
|
|
346
|
+
mrb->symtbl[sym] = p; /* Untagged = heap */
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
mrb->symidx = sym;
|
|
350
|
+
return sym;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
static mrb_sym
|
|
354
|
+
sym_intern_linear_mode(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
|
|
355
|
+
{
|
|
356
|
+
mrb_sym sym = sym_intern_common(mrb, name, len, lit);
|
|
357
|
+
return (sym+MRB_PRESYM_MAX);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
static mrb_sym
|
|
361
|
+
sym_intern_hash_mode(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
|
|
362
|
+
{
|
|
363
|
+
mrb_sym sym = sym_intern_common(mrb, name, len, lit);
|
|
364
|
+
struct mrb_sym_hash_table *ht = mrb->symhash;
|
|
365
|
+
uint8_t hash = mrb_byte_hash((const uint8_t*)name, len);
|
|
366
|
+
|
|
367
|
+
if (ht->buckets[hash]) {
|
|
368
|
+
mrb_sym i = sym - ht->buckets[hash];
|
|
369
|
+
if (i > 0xff)
|
|
370
|
+
ht->symlink[sym] = 0xff;
|
|
371
|
+
else
|
|
372
|
+
ht->symlink[sym] = i;
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
ht->symlink[sym] = 0;
|
|
376
|
+
}
|
|
377
|
+
ht->buckets[hash] = sym;
|
|
378
|
+
|
|
379
|
+
return (sym+MRB_PRESYM_MAX);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
static mrb_sym
|
|
383
|
+
sym_intern(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
|
|
384
|
+
{
|
|
385
|
+
mrb_sym sym;
|
|
386
|
+
|
|
387
|
+
sym_validate_len(mrb, len);
|
|
388
|
+
sym = find_symbol(mrb, name, len, NULL);
|
|
389
|
+
if (sym > 0) return sym;
|
|
390
|
+
|
|
391
|
+
/* Check if we need to migrate to hash table */
|
|
392
|
+
if (!using_hash_table(mrb) && mrb->symidx >= MRB_SYMBOL_LINEAR_THRESHOLD) {
|
|
393
|
+
migrate_to_hash_table(mrb);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/* Add new symbol using current mode */
|
|
397
|
+
if (using_hash_table(mrb)) {
|
|
398
|
+
return sym_intern_hash_mode(mrb, name, len, lit);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
return sym_intern_linear_mode(mrb, name, len, lit);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/*
|
|
406
|
+
* Interns a string, creating a symbol from it if it doesn't already exist,
|
|
407
|
+
* or returning the existing symbol if it does.
|
|
408
|
+
*
|
|
409
|
+
* mrb: The mruby state.
|
|
410
|
+
* name: The string to intern.
|
|
411
|
+
* len: The length of the string.
|
|
412
|
+
*
|
|
413
|
+
* Returns the interned symbol.
|
|
414
|
+
*/
|
|
415
|
+
MRB_API mrb_sym
|
|
416
|
+
mrb_intern(mrb_state *mrb, const char *name, size_t len)
|
|
417
|
+
{
|
|
418
|
+
return sym_intern(mrb, name, len, FALSE);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/*
|
|
422
|
+
* Interns a static string, creating a symbol from it.
|
|
423
|
+
* This function is similar to mrb_intern, but it assumes that the given
|
|
424
|
+
* string is static and will not be freed.
|
|
425
|
+
*
|
|
426
|
+
* mrb: The mruby state.
|
|
427
|
+
* name: The static string to intern.
|
|
428
|
+
* len: The length of the string.
|
|
429
|
+
*
|
|
430
|
+
* Returns the interned symbol.
|
|
431
|
+
*/
|
|
432
|
+
MRB_API mrb_sym
|
|
433
|
+
mrb_intern_static(mrb_state *mrb, const char *name, size_t len)
|
|
434
|
+
{
|
|
435
|
+
return sym_intern(mrb, name, len, TRUE);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/*
|
|
439
|
+
* Interns a C string (null-terminated), creating a symbol from it.
|
|
440
|
+
* This function is a convenience wrapper around mrb_intern that
|
|
441
|
+
* automatically calculates the length of the string.
|
|
442
|
+
*
|
|
443
|
+
* mrb: The mruby state.
|
|
444
|
+
* name: The C string to intern.
|
|
445
|
+
*
|
|
446
|
+
* Returns the interned symbol.
|
|
447
|
+
*/
|
|
448
|
+
MRB_API mrb_sym
|
|
449
|
+
mrb_intern_cstr(mrb_state *mrb, const char *name)
|
|
450
|
+
{
|
|
451
|
+
return mrb_intern(mrb, name, strlen(name));
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/*
|
|
455
|
+
* Interns an mruby string value, creating a symbol from it.
|
|
456
|
+
*
|
|
457
|
+
* mrb: The mruby state.
|
|
458
|
+
* str: The mruby string value to intern.
|
|
459
|
+
*
|
|
460
|
+
* Returns the interned symbol.
|
|
461
|
+
*/
|
|
462
|
+
MRB_API mrb_sym
|
|
463
|
+
mrb_intern_str(mrb_state *mrb, mrb_value str)
|
|
464
|
+
{
|
|
465
|
+
return mrb_intern(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/*
|
|
469
|
+
* Checks if a symbol already exists for the given string.
|
|
470
|
+
*
|
|
471
|
+
* mrb: The mruby state.
|
|
472
|
+
* name: The string to check.
|
|
473
|
+
* len: The length of the string.
|
|
474
|
+
*
|
|
475
|
+
* Returns the symbol if it exists, otherwise 0.
|
|
476
|
+
*/
|
|
477
|
+
MRB_API mrb_sym
|
|
478
|
+
mrb_intern_check(mrb_state *mrb, const char *name, size_t len)
|
|
479
|
+
{
|
|
480
|
+
mrb_sym sym;
|
|
481
|
+
|
|
482
|
+
sym_validate_len(mrb, len);
|
|
483
|
+
sym = find_symbol(mrb, name, len, NULL);
|
|
484
|
+
if (sym > 0) return sym;
|
|
485
|
+
return 0;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/*
|
|
489
|
+
* Checks if a symbol already exists for the given string.
|
|
490
|
+
*
|
|
491
|
+
* mrb: The mruby state.
|
|
492
|
+
* name: The string to check.
|
|
493
|
+
* len: The length of the string.
|
|
494
|
+
*
|
|
495
|
+
* Returns the symbol as an mrb_value if it exists, otherwise a nil value.
|
|
496
|
+
*/
|
|
497
|
+
MRB_API mrb_value
|
|
498
|
+
mrb_check_intern(mrb_state *mrb, const char *name, size_t len)
|
|
499
|
+
{
|
|
500
|
+
mrb_sym sym = mrb_intern_check(mrb, name, len);
|
|
501
|
+
if (sym == 0) return mrb_nil_value();
|
|
502
|
+
return mrb_symbol_value(sym);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/*
|
|
506
|
+
* Checks if a symbol already exists for the given C string (null-terminated).
|
|
507
|
+
* This function is a convenience wrapper around mrb_intern_check that
|
|
508
|
+
* automatically calculates the length of the string.
|
|
509
|
+
*
|
|
510
|
+
* mrb: The mruby state.
|
|
511
|
+
* name: The C string to check.
|
|
512
|
+
*
|
|
513
|
+
* Returns the symbol if it exists, otherwise 0.
|
|
514
|
+
*/
|
|
515
|
+
MRB_API mrb_sym
|
|
516
|
+
mrb_intern_check_cstr(mrb_state *mrb, const char *name)
|
|
517
|
+
{
|
|
518
|
+
return mrb_intern_check(mrb, name, strlen(name));
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/*
|
|
522
|
+
* Checks if a symbol already exists for the given C string (null-terminated).
|
|
523
|
+
* This function is similar to mrb_intern_check_cstr, but returns the result
|
|
524
|
+
* as an mrb_value (either the symbol or nil).
|
|
525
|
+
*
|
|
526
|
+
* mrb: The mruby state.
|
|
527
|
+
* name: The C string to check.
|
|
528
|
+
*
|
|
529
|
+
* Returns the symbol as an mrb_value if it exists, otherwise a nil value.
|
|
530
|
+
*/
|
|
531
|
+
MRB_API mrb_value
|
|
532
|
+
mrb_check_intern_cstr(mrb_state *mrb, const char *name)
|
|
533
|
+
{
|
|
534
|
+
mrb_sym sym = mrb_intern_check_cstr(mrb, name);
|
|
535
|
+
if (sym == 0) return mrb_nil_value();
|
|
536
|
+
return mrb_symbol_value(sym);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/*
|
|
540
|
+
* Checks if a symbol already exists for the given mruby string value.
|
|
541
|
+
*
|
|
542
|
+
* mrb: The mruby state.
|
|
543
|
+
* str: The mruby string value to check.
|
|
544
|
+
*
|
|
545
|
+
* Returns the symbol if it exists, otherwise 0.
|
|
546
|
+
*/
|
|
547
|
+
MRB_API mrb_sym
|
|
548
|
+
mrb_intern_check_str(mrb_state *mrb, mrb_value str)
|
|
549
|
+
{
|
|
550
|
+
return mrb_intern_check(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/*
|
|
554
|
+
* Checks if a symbol already exists for the given mruby string value.
|
|
555
|
+
* This function is similar to mrb_intern_check_str, but returns the result
|
|
556
|
+
* as an mrb_value (either the symbol or nil).
|
|
557
|
+
*
|
|
558
|
+
* mrb: The mruby state.
|
|
559
|
+
* str: The mruby string value to check.
|
|
560
|
+
*
|
|
561
|
+
* Returns the symbol as an mrb_value if it exists, otherwise a nil value.
|
|
562
|
+
*/
|
|
563
|
+
MRB_API mrb_value
|
|
564
|
+
mrb_check_intern_str(mrb_state *mrb, mrb_value str)
|
|
565
|
+
{
|
|
566
|
+
mrb_sym sym = mrb_intern_check_str(mrb, str);
|
|
567
|
+
if (sym == 0) return mrb_nil_value();
|
|
568
|
+
return mrb_symbol_value(sym);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
static const char*
|
|
572
|
+
sym2name_len(mrb_state *mrb, mrb_sym sym, char *buf, mrb_int *lenp)
|
|
573
|
+
{
|
|
574
|
+
if (sym == 0) goto outofsym;
|
|
575
|
+
if (SYMBOL_INLINE_P(sym)) return sym_inline_unpack(sym, buf, lenp);
|
|
576
|
+
|
|
577
|
+
{
|
|
578
|
+
const char *name = presym_sym2name(sym, lenp);
|
|
579
|
+
if (name) return name;
|
|
580
|
+
}
|
|
581
|
+
sym -= MRB_PRESYM_MAX;
|
|
582
|
+
|
|
583
|
+
if (mrb->symidx < sym) {
|
|
584
|
+
outofsym:
|
|
585
|
+
if (lenp) *lenp = 0;
|
|
586
|
+
return NULL;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
const char *tagged_ptr = mrb->symtbl[sym];
|
|
590
|
+
const char *symname = symtbl_get_ptr(tagged_ptr); /* Untag for access */
|
|
591
|
+
|
|
592
|
+
if (!symtbl_is_literal(tagged_ptr)) {
|
|
593
|
+
uint32_t len = mrb_packed_int_decode((const uint8_t*)symname, (const uint8_t**)&symname);
|
|
594
|
+
if (lenp) *lenp = (mrb_int)len;
|
|
595
|
+
}
|
|
596
|
+
else if (lenp) {
|
|
597
|
+
*lenp = (mrb_int)strlen(symname);
|
|
598
|
+
}
|
|
599
|
+
return symname;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/*
|
|
603
|
+
* Retrieves the name and length of a symbol.
|
|
604
|
+
*
|
|
605
|
+
* mrb: The mruby state.
|
|
606
|
+
* sym: The symbol to retrieve the name and length for.
|
|
607
|
+
* lenp: A pointer to an mrb_int where the length of the symbol name will be stored.
|
|
608
|
+
* This can be NULL if the length is not needed.
|
|
609
|
+
*
|
|
610
|
+
* Returns a pointer to the C string representing the symbol's name,
|
|
611
|
+
* or NULL if the symbol is invalid.
|
|
612
|
+
* For inline symbols, the name is copied to an internal buffer (mrb->symbuf)
|
|
613
|
+
* unless MRB_USE_ALL_SYMBOLS is defined.
|
|
614
|
+
*/
|
|
615
|
+
MRB_API const char*
|
|
616
|
+
mrb_sym_name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp)
|
|
617
|
+
{
|
|
618
|
+
#ifdef MRB_USE_ALL_SYMBOLS
|
|
619
|
+
return sym2name_len(mrb, sym, NULL, lenp);
|
|
620
|
+
#else
|
|
621
|
+
return sym2name_len(mrb, sym, mrb->symbuf, lenp);
|
|
622
|
+
#endif
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
void
|
|
626
|
+
mrb_free_symtbl(mrb_state *mrb)
|
|
627
|
+
{
|
|
628
|
+
/* Free symbol string pool chunks */
|
|
629
|
+
struct sym_pool_chunk *chunk = (struct sym_pool_chunk*)mrb->sym_pool;
|
|
630
|
+
while (chunk) {
|
|
631
|
+
struct sym_pool_chunk *next = chunk->next;
|
|
632
|
+
mrb_free(mrb, chunk);
|
|
633
|
+
chunk = next;
|
|
634
|
+
}
|
|
635
|
+
mrb->sym_pool = NULL;
|
|
636
|
+
|
|
637
|
+
mrb_free(mrb, (void*)mrb->symtbl);
|
|
638
|
+
|
|
639
|
+
/* Free hash table if allocated */
|
|
640
|
+
if (mrb->symhash) {
|
|
641
|
+
mrb_free(mrb, mrb->symhash->symlink);
|
|
642
|
+
mrb_free(mrb, mrb->symhash);
|
|
643
|
+
mrb->symhash = NULL;
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
void
|
|
648
|
+
mrb_init_symtbl(mrb_state *mrb)
|
|
649
|
+
{
|
|
650
|
+
/* Initialize in linear mode - hash table allocated on demand */
|
|
651
|
+
mrb->symhash = NULL;
|
|
652
|
+
mrb->sym_pool = NULL;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**********************************************************************
|
|
656
|
+
* Document-class: Symbol
|
|
657
|
+
*
|
|
658
|
+
* `Symbol` objects represent names and some strings
|
|
659
|
+
* inside the Ruby
|
|
660
|
+
* interpreter. They are generated using the `:name` and
|
|
661
|
+
* `:"string"` literals
|
|
662
|
+
* syntax, and by the various `to_sym` methods. The same
|
|
663
|
+
* `Symbol` object will be created for a given name or string
|
|
664
|
+
* for the duration of a program's execution, regardless of the context
|
|
665
|
+
* or meaning of that name. Thus if `Fred` is a constant in
|
|
666
|
+
* one context, a method in another, and a class in a third, the
|
|
667
|
+
* `Symbol` `:Fred` will be the same object in
|
|
668
|
+
* all three contexts.
|
|
669
|
+
*
|
|
670
|
+
* module One
|
|
671
|
+
* class Fred
|
|
672
|
+
* end
|
|
673
|
+
* $f1 = :Fred
|
|
674
|
+
* end
|
|
675
|
+
* module Two
|
|
676
|
+
* Fred = 1
|
|
677
|
+
* $f2 = :Fred
|
|
678
|
+
* end
|
|
679
|
+
* def Fred()
|
|
680
|
+
* end
|
|
681
|
+
* $f3 = :Fred
|
|
682
|
+
* $f1.object_id #=> 2514190
|
|
683
|
+
* $f2.object_id #=> 2514190
|
|
684
|
+
* $f3.object_id #=> 2514190
|
|
685
|
+
*
|
|
686
|
+
*/
|
|
687
|
+
|
|
688
|
+
/* 15.2.11.3.2 */
|
|
689
|
+
/* 15.2.11.3.3 */
|
|
690
|
+
/*
|
|
691
|
+
* call-seq:
|
|
692
|
+
* sym.to_s -> string
|
|
693
|
+
*
|
|
694
|
+
* Returns the name or string corresponding to *sym*.
|
|
695
|
+
*
|
|
696
|
+
* :fred.to_s #=> "fred"
|
|
697
|
+
*/
|
|
698
|
+
static mrb_value
|
|
699
|
+
sym_to_s(mrb_state *mrb, mrb_value sym)
|
|
700
|
+
{
|
|
701
|
+
return mrb_sym_str(mrb, mrb_symbol(sym));
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/*
|
|
705
|
+
* call-seq:
|
|
706
|
+
* sym.name -> string
|
|
707
|
+
*
|
|
708
|
+
* Returns the name or string corresponding to *sym*. Unlike #to_s, the
|
|
709
|
+
* returned string is frozen.
|
|
710
|
+
*
|
|
711
|
+
* :fred.name #=> "fred"
|
|
712
|
+
* :fred.name.frozen? #=> true
|
|
713
|
+
*/
|
|
714
|
+
static mrb_value
|
|
715
|
+
sym_name(mrb_state *mrb, mrb_value vsym)
|
|
716
|
+
{
|
|
717
|
+
mrb_sym sym = mrb_symbol(vsym);
|
|
718
|
+
mrb_int len;
|
|
719
|
+
const char *name = mrb_sym_name_len(mrb, sym, &len);
|
|
720
|
+
|
|
721
|
+
mrb_assert(name != NULL);
|
|
722
|
+
if (SYMBOL_INLINE_P(sym)) {
|
|
723
|
+
return mrb_str_new_frozen(mrb, name, len);
|
|
724
|
+
}
|
|
725
|
+
return mrb_str_new_static_frozen(mrb, name, len);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/* 15.2.11.3.4 */
|
|
729
|
+
/*
|
|
730
|
+
* Document-method: Symbol#to_sym
|
|
731
|
+
*
|
|
732
|
+
* call-seq:
|
|
733
|
+
* sym.to_sym -> sym
|
|
734
|
+
* sym.intern -> sym
|
|
735
|
+
*
|
|
736
|
+
* In general, `to_sym` returns the `Symbol` corresponding
|
|
737
|
+
* to an object. As *sym* is already a symbol, `self` is returned
|
|
738
|
+
* in this case.
|
|
739
|
+
*/
|
|
740
|
+
|
|
741
|
+
/* 15.2.11.3.5(x) */
|
|
742
|
+
/*
|
|
743
|
+
* call-seq:
|
|
744
|
+
* sym.inspect -> string
|
|
745
|
+
*
|
|
746
|
+
* Returns the representation of *sym* as a symbol literal.
|
|
747
|
+
*
|
|
748
|
+
* :fred.inspect #=> ":fred"
|
|
749
|
+
*/
|
|
750
|
+
|
|
751
|
+
#if __STDC__
|
|
752
|
+
# define SIGN_EXTEND_CHAR(c) ((signed char)(c))
|
|
753
|
+
#else /* not __STDC__ */
|
|
754
|
+
/* As in Harbison and Steele. */
|
|
755
|
+
# define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
|
|
756
|
+
#endif
|
|
757
|
+
#define is_identchar(c) (SIGN_EXTEND_CHAR(c)!=-1&&(ISALNUM(c) || (c) == '_'))
|
|
758
|
+
|
|
759
|
+
static mrb_bool
|
|
760
|
+
is_special_global_name(const char* m)
|
|
761
|
+
{
|
|
762
|
+
switch (*m) {
|
|
763
|
+
case '~': case '*': case '$': case '?': case '!': case '@':
|
|
764
|
+
case '/': case '\\': case ';': case ',': case '.': case '=':
|
|
765
|
+
case ':': case '<': case '>': case '\"':
|
|
766
|
+
case '&': case '`': case '\'': case '+':
|
|
767
|
+
case '0':
|
|
768
|
+
m++;
|
|
769
|
+
break;
|
|
770
|
+
case '-':
|
|
771
|
+
m++;
|
|
772
|
+
if (is_identchar(*m)) m += 1;
|
|
773
|
+
break;
|
|
774
|
+
default:
|
|
775
|
+
if (!ISDIGIT(*m)) return FALSE;
|
|
776
|
+
do m++; while (ISDIGIT(*m));
|
|
777
|
+
break;
|
|
778
|
+
}
|
|
779
|
+
return !*m;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
static mrb_bool
|
|
783
|
+
symname_p(const char *name)
|
|
784
|
+
{
|
|
785
|
+
const char *m = name;
|
|
786
|
+
mrb_bool localid = FALSE;
|
|
787
|
+
|
|
788
|
+
if (!m) return FALSE;
|
|
789
|
+
switch (*m) {
|
|
790
|
+
case '\0':
|
|
791
|
+
return FALSE;
|
|
792
|
+
|
|
793
|
+
case '$':
|
|
794
|
+
if (is_special_global_name(++m)) return TRUE;
|
|
795
|
+
goto id;
|
|
796
|
+
|
|
797
|
+
case '@':
|
|
798
|
+
if (*++m == '@') ++m;
|
|
799
|
+
goto id;
|
|
800
|
+
|
|
801
|
+
case '<':
|
|
802
|
+
switch (*++m) {
|
|
803
|
+
case '<': ++m; break;
|
|
804
|
+
case '=': if (*++m == '>') m++; break;
|
|
805
|
+
default: break;
|
|
806
|
+
}
|
|
807
|
+
break;
|
|
808
|
+
|
|
809
|
+
case '>':
|
|
810
|
+
switch (*++m) {
|
|
811
|
+
case '>': case '=': ++m; break;
|
|
812
|
+
default: break;
|
|
813
|
+
}
|
|
814
|
+
break;
|
|
815
|
+
|
|
816
|
+
case '=':
|
|
817
|
+
switch (*++m) {
|
|
818
|
+
case '~': m++; break;
|
|
819
|
+
case '=': if (*++m == '=') m++; break;
|
|
820
|
+
default: return FALSE;
|
|
821
|
+
}
|
|
822
|
+
break;
|
|
823
|
+
|
|
824
|
+
case '*':
|
|
825
|
+
if (*++m == '*') m++;
|
|
826
|
+
break;
|
|
827
|
+
case '!':
|
|
828
|
+
switch (*++m) {
|
|
829
|
+
case '=': case '~': m++;
|
|
830
|
+
}
|
|
831
|
+
break;
|
|
832
|
+
case '+': case '-':
|
|
833
|
+
if (*++m == '@') m++;
|
|
834
|
+
break;
|
|
835
|
+
case '|':
|
|
836
|
+
if (*++m == '|') m++;
|
|
837
|
+
break;
|
|
838
|
+
case '&':
|
|
839
|
+
if (*++m == '&') m++;
|
|
840
|
+
break;
|
|
841
|
+
|
|
842
|
+
case '^': case '/': case '%': case '~': case '`':
|
|
843
|
+
m++;
|
|
844
|
+
break;
|
|
845
|
+
|
|
846
|
+
case '[':
|
|
847
|
+
if (*++m != ']') return FALSE;
|
|
848
|
+
if (*++m == '=') m++;
|
|
849
|
+
break;
|
|
850
|
+
|
|
851
|
+
default:
|
|
852
|
+
localid = !ISUPPER(*m);
|
|
853
|
+
id:
|
|
854
|
+
if (*m != '_' && !ISALPHA(*m)) return FALSE;
|
|
855
|
+
while (is_identchar(*m)) m += 1;
|
|
856
|
+
if (localid) {
|
|
857
|
+
switch (*m) {
|
|
858
|
+
case '!': case '?': case '=': m++;
|
|
859
|
+
default: break;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
break;
|
|
863
|
+
}
|
|
864
|
+
return *m ? FALSE : TRUE;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
static mrb_value
|
|
868
|
+
sym_inspect(mrb_state *mrb, mrb_value sym)
|
|
869
|
+
{
|
|
870
|
+
mrb_sym id = mrb_symbol(sym);
|
|
871
|
+
mrb_int len;
|
|
872
|
+
const char *name = mrb_sym_name_len(mrb, id, &len);
|
|
873
|
+
mrb_value str = mrb_str_new(mrb, NULL, len+1);
|
|
874
|
+
char *sp = RSTRING_PTR(str);
|
|
875
|
+
|
|
876
|
+
sp[0] = ':';
|
|
877
|
+
memcpy(sp+1, name, len);
|
|
878
|
+
mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
|
|
879
|
+
if (!symname_p(name) || strlen(name) != (size_t)len) {
|
|
880
|
+
str = mrb_str_inspect(mrb, str);
|
|
881
|
+
sp = RSTRING_PTR(str);
|
|
882
|
+
sp[0] = ':';
|
|
883
|
+
sp[1] = '"';
|
|
884
|
+
}
|
|
885
|
+
#ifdef MRB_UTF8_STRING
|
|
886
|
+
if (SYMBOL_INLINE_P(id)) RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
887
|
+
#endif
|
|
888
|
+
return str;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
/*
|
|
892
|
+
* Converts a symbol to an mruby string value.
|
|
893
|
+
*
|
|
894
|
+
* mrb: The mruby state.
|
|
895
|
+
* sym: The symbol to convert.
|
|
896
|
+
*
|
|
897
|
+
* Returns the mruby string value corresponding to the symbol.
|
|
898
|
+
* If the symbol is an inline symbol, a new string is created.
|
|
899
|
+
* Otherwise, a static string (sharing the symbol's name buffer) is returned.
|
|
900
|
+
* Returns an undefined value if the symbol is invalid (though this should not happen).
|
|
901
|
+
*/
|
|
902
|
+
MRB_API mrb_value
|
|
903
|
+
mrb_sym_str(mrb_state *mrb, mrb_sym sym)
|
|
904
|
+
{
|
|
905
|
+
mrb_int len;
|
|
906
|
+
const char *name = mrb_sym_name_len(mrb, sym, &len);
|
|
907
|
+
|
|
908
|
+
if (!name) return mrb_undef_value(); /* can't happen */
|
|
909
|
+
if (SYMBOL_INLINE_P(sym)) {
|
|
910
|
+
mrb_value str = mrb_str_new(mrb, name, len);
|
|
911
|
+
RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
|
|
912
|
+
return str;
|
|
913
|
+
}
|
|
914
|
+
return mrb_str_new_static(mrb, name, len);
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
static const char*
|
|
918
|
+
sym_cstr(mrb_state *mrb, mrb_sym sym, mrb_bool dump)
|
|
919
|
+
{
|
|
920
|
+
mrb_int len;
|
|
921
|
+
const char *name = mrb_sym_name_len(mrb, sym, &len);
|
|
922
|
+
|
|
923
|
+
if (!name) return NULL;
|
|
924
|
+
if (strlen(name) == (size_t)len && (!dump || symname_p(name))) {
|
|
925
|
+
return name;
|
|
926
|
+
}
|
|
927
|
+
else {
|
|
928
|
+
mrb_value str = mrb_str_new_static(mrb, name, len);
|
|
929
|
+
str = mrb_str_dump(mrb, str);
|
|
930
|
+
return RSTRING_PTR(str);
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
/*
|
|
935
|
+
* Retrieves the C string representation of a symbol's name.
|
|
936
|
+
*
|
|
937
|
+
* mrb: The mruby state.
|
|
938
|
+
* sym: The symbol to retrieve the name for.
|
|
939
|
+
*
|
|
940
|
+
* Returns a pointer to the C string representing the symbol's name.
|
|
941
|
+
* Returns NULL if the symbol is invalid.
|
|
942
|
+
* If the symbol's name contains null bytes or is not a valid identifier
|
|
943
|
+
* for direct use (based on internal checks in sym_cstr), this function
|
|
944
|
+
* might return a "dumped" (quoted and escaped) version of the name.
|
|
945
|
+
*/
|
|
946
|
+
MRB_API const char*
|
|
947
|
+
mrb_sym_name(mrb_state *mrb, mrb_sym sym)
|
|
948
|
+
{
|
|
949
|
+
return sym_cstr(mrb, sym, FALSE);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
/*
|
|
953
|
+
* Retrieves the C string representation of a symbol's name, suitable for dumping.
|
|
954
|
+
* This version is intended for producing a string that can be safely outputted,
|
|
955
|
+
* for example, in debugging or serialization contexts. It may quote or escape
|
|
956
|
+
* the symbol name if it's not a simple identifier.
|
|
957
|
+
*
|
|
958
|
+
* mrb: The mruby state.
|
|
959
|
+
* sym: The symbol to retrieve the dump name for.
|
|
960
|
+
*
|
|
961
|
+
* Returns a pointer to the C string representing the symbol's name for dumping.
|
|
962
|
+
* Returns NULL if the symbol is invalid.
|
|
963
|
+
*/
|
|
964
|
+
MRB_API const char*
|
|
965
|
+
mrb_sym_dump(mrb_state *mrb, mrb_sym sym)
|
|
966
|
+
{
|
|
967
|
+
return sym_cstr(mrb, sym, TRUE);
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
#define lesser(a,b) (((a)>(b))?(b):(a))
|
|
971
|
+
|
|
972
|
+
static mrb_value
|
|
973
|
+
sym_cmp(mrb_state *mrb, mrb_value s1)
|
|
974
|
+
{
|
|
975
|
+
mrb_value s2 = mrb_get_arg1(mrb);
|
|
976
|
+
mrb_sym sym1, sym2;
|
|
977
|
+
|
|
978
|
+
if (!mrb_symbol_p(s2)) return mrb_nil_value();
|
|
979
|
+
sym1 = mrb_symbol(s1);
|
|
980
|
+
sym2 = mrb_symbol(s2);
|
|
981
|
+
if (sym1 == sym2) return mrb_fixnum_value(0);
|
|
982
|
+
else {
|
|
983
|
+
const char *p1, *p2;
|
|
984
|
+
int retval;
|
|
985
|
+
mrb_int len, len1, len2;
|
|
986
|
+
char buf1[8], buf2[8];
|
|
987
|
+
|
|
988
|
+
p1 = sym2name_len(mrb, sym1, buf1, &len1);
|
|
989
|
+
p2 = sym2name_len(mrb, sym2, buf2, &len2);
|
|
990
|
+
len = lesser(len1, len2);
|
|
991
|
+
retval = memcmp(p1, p2, len);
|
|
992
|
+
if (retval == 0) {
|
|
993
|
+
if (len1 == len2) return mrb_fixnum_value(0);
|
|
994
|
+
if (len1 > len2) return mrb_fixnum_value(1);
|
|
995
|
+
return mrb_fixnum_value(-1);
|
|
996
|
+
}
|
|
997
|
+
if (retval > 0) return mrb_fixnum_value(1);
|
|
998
|
+
return mrb_fixnum_value(-1);
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
#undef lesser
|
|
1002
|
+
|
|
1003
|
+
/* ---------------------------*/
|
|
1004
|
+
static const mrb_mt_entry symbol_rom_entries[] = {
|
|
1005
|
+
MRB_MT_ENTRY(sym_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.11.3.3 */
|
|
1006
|
+
MRB_MT_ENTRY(sym_name, MRB_SYM(name), MRB_ARGS_NONE()),
|
|
1007
|
+
MRB_MT_ENTRY(mrb_obj_itself, MRB_SYM(to_sym), MRB_ARGS_NONE()), /* 15.2.11.3.4 */
|
|
1008
|
+
MRB_MT_ENTRY(sym_inspect, MRB_SYM(inspect), MRB_ARGS_NONE()), /* 15.2.11.3.5(x) */
|
|
1009
|
+
MRB_MT_ENTRY(sym_cmp, MRB_OPSYM(cmp), MRB_ARGS_REQ(1)),
|
|
1010
|
+
MRB_MT_ENTRY(mrb_obj_equal_m, MRB_OPSYM(eq), MRB_ARGS_REQ(1)),
|
|
1011
|
+
};
|
|
1012
|
+
|
|
1013
|
+
void
|
|
1014
|
+
mrb_init_symbol(mrb_state *mrb)
|
|
1015
|
+
{
|
|
1016
|
+
struct RClass *sym;
|
|
1017
|
+
|
|
1018
|
+
mrb->symbol_class = sym = mrb_define_class_id(mrb, MRB_SYM(Symbol), mrb->object_class); /* 15.2.11 */
|
|
1019
|
+
MRB_SET_INSTANCE_TT(sym, MRB_TT_SYMBOL);
|
|
1020
|
+
mrb_undef_class_method_id(mrb, sym, MRB_SYM(new));
|
|
1021
|
+
|
|
1022
|
+
MRB_MT_INIT_ROM(mrb, sym, symbol_rom_entries);
|
|
1023
|
+
}
|