debase-ruby_core_source 0.10.14 → 0.10.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -0
- data/debase-ruby_core_source.gemspec +2 -2
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/addr2line.h +1 -1
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/list/list.h +773 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ccan/str/str.h +16 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/constant.h +51 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/debug_counter.h +109 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/dln.h +10 -9
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/encindex.h +69 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/eval_intern.h +334 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/gc.h +27 -10
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/id.h +250 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/id_table.h +31 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/insns.inc +217 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/insns_info.inc +1570 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/internal.h +2036 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/iseq.h +308 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/known_errors.inc +16 -1
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/method.h +218 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/node.h +115 -79
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/node_name.inc +12 -22
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/opt_sc.inc +1601 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/optinsn.inc +103 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/optunifs.inc +28 -83
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/parse.h +74 -60
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/probes_helper.h +43 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/regenc.h +254 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/regint.h +299 -211
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/regparse.h +45 -37
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/revision.h +1 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/ruby_assert.h +54 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/ruby_atomic.h +84 -26
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/siphash.h +1 -1
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/symbol.h +108 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/thread_pthread.h +14 -11
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/thread_win32.h +2 -6
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/timev.h +42 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/transcode_data.h +34 -12
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/version.h +73 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm.inc +3667 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm_call_iseq_optimized.inc +213 -0
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm_core.h +1768 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550/debug.h → ruby-2.5.4-p155/vm_debug.h} +4 -8
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/vm_exec.h +38 -30
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vm_insnhelper.h +255 -0
- data/lib/debase/ruby_core_source/{ruby-1.9.3-p550 → ruby-2.5.4-p155}/vm_opts.h +14 -9
- data/lib/debase/ruby_core_source/ruby-2.5.4-p155/vmtc.inc +214 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/addr2line.h +20 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/builtin.h +84 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ccan/list/list.h +789 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ccan/str/str.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/constant.h +55 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/darray.h +226 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/debug_counter.h +469 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/dln.h +31 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/encindex.h +70 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/eval_intern.h +339 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/gc.h +143 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/hrtime.h +216 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/id.h +295 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/id_table.h +36 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/insns.inc +249 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/insns_info.inc +9064 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/array.h +113 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/bignum.h +246 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/bits.h +565 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/class.h +211 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/cmdlineopt.h +61 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/compar.h +49 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/compile.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/compilers.h +107 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/complex.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/cont.h +24 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/dir.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/enc.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/encoding.h +30 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/enum.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/enumerator.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/error.h +191 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/eval.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/file.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/fixnum.h +184 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/gc.h +188 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/hash.h +243 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/imemo.h +243 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/inits.h +50 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/io.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/load.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/loadpath.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/math.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/missing.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/numeric.h +271 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/object.h +83 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/parse.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/proc.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/process.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/ractor.h +6 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/random.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/range.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/rational.h +72 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/re.h +30 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/sanitizers.h +190 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/serial.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/signal.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/static_assert.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/string.h +141 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/struct.h +153 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/symbol.h +41 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/thread.h +53 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/time.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/transcode.h +20 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/util.h +27 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/variable.h +83 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/vm.h +134 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal/warnings.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/internal.h +109 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/iseq.h +325 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/known_errors.inc +791 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/method.h +254 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/mjit.h +231 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/mjit_compile.inc +8333 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/node.h +510 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/node_name.inc +208 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/opt_sc.inc +109 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/parse.h +214 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/probes_helper.h +44 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ractor_core.h +346 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/regenc.h +255 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/regint.h +957 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/regparse.h +370 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/revision.h +2 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ruby_assert.h +14 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/ruby_atomic.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/symbol.h +119 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/thread_none.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/thread_pthread.h +115 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/thread_win32.h +61 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/timev.h +57 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/transcode_data.h +138 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/transient_heap.h +65 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/variable.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/version.h +91 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm.inc +5481 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_call_iseq_optimized.inc +244 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_callinfo.h +502 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_core.h +2089 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_debug.h +113 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_exec.h +197 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_insnhelper.h +262 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_opts.h +73 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vm_sync.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/vmtc.inc +243 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/yjit.h +73 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/yjit_asm.h +408 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/yjit_codegen.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/yjit_core.h +307 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview1/yjit_iface.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/addr2line.h +20 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/builtin.h +121 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/list/list.h +789 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/str/str.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/constant.h +55 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/darray.h +179 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/debug_counter.h +469 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/dln.h +31 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/encindex.h +70 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/eval_intern.h +339 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/gc.h +143 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/hrtime.h +226 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/id.h +295 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/id_table.h +36 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/insns.inc +249 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/insns_info.inc +9061 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/array.h +162 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/bignum.h +246 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/bits.h +565 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/class.h +212 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/cmdlineopt.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/compar.h +49 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/compile.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/compilers.h +107 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/complex.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/cont.h +26 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/dir.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/enc.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/encoding.h +30 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/enum.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/enumerator.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/error.h +191 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/eval.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/file.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/fixnum.h +184 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/gc.h +188 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/hash.h +243 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/imemo.h +242 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/inits.h +50 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/io.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/load.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/loadpath.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/math.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/missing.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/numeric.h +271 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/object.h +83 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/parse.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/proc.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/process.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/ractor.h +6 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/random.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/range.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/rational.h +72 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/re.h +30 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/sanitizers.h +190 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/serial.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/signal.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/static_assert.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/string.h +146 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/struct.h +153 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/symbol.h +42 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/thread.h +54 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/time.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/transcode.h +20 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/util.h +27 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/variable.h +83 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/vm.h +134 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/warnings.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal.h +113 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/iseq.h +328 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/known_errors.inc +791 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/method.h +253 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit.h +136 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit_compile_attr.inc +430 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit_compiler.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit_unit.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/node.h +510 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/node_name.inc +208 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/opt_sc.inc +109 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/parse.h +214 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/probes_helper.h +44 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ractor_core.h +341 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/regenc.h +255 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/regint.h +957 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/regparse.h +370 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/revision.h +2 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ruby_assert.h +14 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ruby_atomic.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/symbol.h +119 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/thread_none.h +20 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/thread_pthread.h +132 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/thread_win32.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/timev.h +57 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/transcode_data.h +138 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/transient_heap.h +65 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/variable.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/version.h +68 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm.inc +5476 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_call_iseq_optimized.inc +244 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_callinfo.h +522 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_core.h +2130 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_debug.h +122 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_exec.h +197 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_insnhelper.h +269 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_opts.h +73 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_sync.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vmtc.inc +243 -0
- data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/yjit.h +72 -0
- data/lib/debase/ruby_core_source/version.rb +1 -1
- metadata +284 -44
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/constant.h +0 -34
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/encdb.h +0 -167
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/eval_intern.h +0 -234
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/id.h +0 -177
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/insns.inc +0 -179
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/insns_info.inc +0 -695
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/internal.h +0 -242
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/iseq.h +0 -126
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/method.h +0 -105
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/opt_sc.inc +0 -670
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/optinsn.inc +0 -30
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/regenc.h +0 -219
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/revision.h +0 -1
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/timev.h +0 -21
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/transdb.h +0 -189
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/version.h +0 -52
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vm.inc +0 -3054
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vm_core.h +0 -763
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vm_insnhelper.h +0 -220
- data/lib/debase/ruby_core_source/ruby-1.9.3-p550/vmtc.inc +0 -97
@@ -0,0 +1,522 @@
|
|
1
|
+
#ifndef RUBY_VM_CALLINFO_H /*-*-C-*-vi:se ft=c:*/
|
2
|
+
#define RUBY_VM_CALLINFO_H
|
3
|
+
/**
|
4
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
5
|
+
* @copyright This file is a part of the programming language Ruby.
|
6
|
+
* Permission is hereby granted, to either redistribute and/or
|
7
|
+
* modify this file, provided that the conditions mentioned in the
|
8
|
+
* file COPYING are met. Consult the file for details.
|
9
|
+
*/
|
10
|
+
|
11
|
+
#include "debug_counter.h"
|
12
|
+
#include "internal/class.h"
|
13
|
+
|
14
|
+
enum vm_call_flag_bits {
|
15
|
+
VM_CALL_ARGS_SPLAT_bit, /* m(*args) */
|
16
|
+
VM_CALL_ARGS_BLOCKARG_bit, /* m(&block) */
|
17
|
+
VM_CALL_FCALL_bit, /* m(...) */
|
18
|
+
VM_CALL_VCALL_bit, /* m */
|
19
|
+
VM_CALL_ARGS_SIMPLE_bit, /* (ci->flag & (SPLAT|BLOCKARG)) && blockiseq == NULL && ci->kw_arg == NULL */
|
20
|
+
VM_CALL_BLOCKISEQ_bit, /* has blockiseq */
|
21
|
+
VM_CALL_KWARG_bit, /* has kwarg */
|
22
|
+
VM_CALL_KW_SPLAT_bit, /* m(**opts) */
|
23
|
+
VM_CALL_TAILCALL_bit, /* located at tail position */
|
24
|
+
VM_CALL_SUPER_bit, /* super */
|
25
|
+
VM_CALL_ZSUPER_bit, /* zsuper */
|
26
|
+
VM_CALL_OPT_SEND_bit, /* internal flag */
|
27
|
+
VM_CALL_KW_SPLAT_MUT_bit, /* kw splat hash can be modified (to avoid allocating a new one) */
|
28
|
+
VM_CALL__END
|
29
|
+
};
|
30
|
+
|
31
|
+
#define VM_CALL_ARGS_SPLAT (0x01 << VM_CALL_ARGS_SPLAT_bit)
|
32
|
+
#define VM_CALL_ARGS_BLOCKARG (0x01 << VM_CALL_ARGS_BLOCKARG_bit)
|
33
|
+
#define VM_CALL_FCALL (0x01 << VM_CALL_FCALL_bit)
|
34
|
+
#define VM_CALL_VCALL (0x01 << VM_CALL_VCALL_bit)
|
35
|
+
#define VM_CALL_ARGS_SIMPLE (0x01 << VM_CALL_ARGS_SIMPLE_bit)
|
36
|
+
#define VM_CALL_BLOCKISEQ (0x01 << VM_CALL_BLOCKISEQ_bit)
|
37
|
+
#define VM_CALL_KWARG (0x01 << VM_CALL_KWARG_bit)
|
38
|
+
#define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
|
39
|
+
#define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
|
40
|
+
#define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
|
41
|
+
#define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
|
42
|
+
#define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
|
43
|
+
#define VM_CALL_KW_SPLAT_MUT (0x01 << VM_CALL_KW_SPLAT_MUT_bit)
|
44
|
+
|
45
|
+
struct rb_callinfo_kwarg {
|
46
|
+
int keyword_len;
|
47
|
+
VALUE keywords[];
|
48
|
+
};
|
49
|
+
|
50
|
+
static inline size_t
|
51
|
+
rb_callinfo_kwarg_bytes(int keyword_len)
|
52
|
+
{
|
53
|
+
return rb_size_mul_add_or_raise(
|
54
|
+
keyword_len,
|
55
|
+
sizeof(VALUE),
|
56
|
+
sizeof(struct rb_callinfo_kwarg),
|
57
|
+
rb_eRuntimeError);
|
58
|
+
}
|
59
|
+
|
60
|
+
// imemo_callinfo
|
61
|
+
struct rb_callinfo {
|
62
|
+
VALUE flags;
|
63
|
+
const struct rb_callinfo_kwarg *kwarg;
|
64
|
+
VALUE mid;
|
65
|
+
VALUE flag;
|
66
|
+
VALUE argc;
|
67
|
+
};
|
68
|
+
|
69
|
+
#ifndef USE_EMBED_CI
|
70
|
+
#define USE_EMBED_CI 1
|
71
|
+
#endif
|
72
|
+
|
73
|
+
#if SIZEOF_VALUE == 8
|
74
|
+
#define CI_EMBED_TAG_bits 1
|
75
|
+
#define CI_EMBED_ARGC_bits 15
|
76
|
+
#define CI_EMBED_FLAG_bits 16
|
77
|
+
#define CI_EMBED_ID_bits 32
|
78
|
+
#elif SIZEOF_VALUE == 4
|
79
|
+
#define CI_EMBED_TAG_bits 1
|
80
|
+
#define CI_EMBED_ARGC_bits 3
|
81
|
+
#define CI_EMBED_FLAG_bits 13
|
82
|
+
#define CI_EMBED_ID_bits 15
|
83
|
+
#endif
|
84
|
+
|
85
|
+
#if (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits + CI_EMBED_ID_bits) != (SIZEOF_VALUE * 8)
|
86
|
+
#error
|
87
|
+
#endif
|
88
|
+
|
89
|
+
#define CI_EMBED_FLAG 0x01
|
90
|
+
#define CI_EMBED_ARGC_SHFT (CI_EMBED_TAG_bits)
|
91
|
+
#define CI_EMBED_ARGC_MASK ((((VALUE)1)<<CI_EMBED_ARGC_bits) - 1)
|
92
|
+
#define CI_EMBED_FLAG_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits)
|
93
|
+
#define CI_EMBED_FLAG_MASK ((((VALUE)1)<<CI_EMBED_FLAG_bits) - 1)
|
94
|
+
#define CI_EMBED_ID_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits)
|
95
|
+
#define CI_EMBED_ID_MASK ((((VALUE)1)<<CI_EMBED_ID_bits) - 1)
|
96
|
+
|
97
|
+
static inline bool
|
98
|
+
vm_ci_packed_p(const struct rb_callinfo *ci)
|
99
|
+
{
|
100
|
+
#if USE_EMBED_CI
|
101
|
+
if (LIKELY(((VALUE)ci) & 0x01)) {
|
102
|
+
return 1;
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
VM_ASSERT(IMEMO_TYPE_P(ci, imemo_callinfo));
|
106
|
+
return 0;
|
107
|
+
}
|
108
|
+
#else
|
109
|
+
return 0;
|
110
|
+
#endif
|
111
|
+
}
|
112
|
+
|
113
|
+
static inline bool
|
114
|
+
vm_ci_p(const struct rb_callinfo *ci)
|
115
|
+
{
|
116
|
+
if (vm_ci_packed_p(ci) || IMEMO_TYPE_P(ci, imemo_callinfo)) {
|
117
|
+
return 1;
|
118
|
+
}
|
119
|
+
else {
|
120
|
+
return 0;
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
static inline ID
|
125
|
+
vm_ci_mid(const struct rb_callinfo *ci)
|
126
|
+
{
|
127
|
+
if (vm_ci_packed_p(ci)) {
|
128
|
+
return (((VALUE)ci) >> CI_EMBED_ID_SHFT) & CI_EMBED_ID_MASK;
|
129
|
+
}
|
130
|
+
else {
|
131
|
+
return (ID)ci->mid;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
static inline unsigned int
|
136
|
+
vm_ci_flag(const struct rb_callinfo *ci)
|
137
|
+
{
|
138
|
+
if (vm_ci_packed_p(ci)) {
|
139
|
+
return (unsigned int)((((VALUE)ci) >> CI_EMBED_FLAG_SHFT) & CI_EMBED_FLAG_MASK);
|
140
|
+
}
|
141
|
+
else {
|
142
|
+
return (unsigned int)ci->flag;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
static inline unsigned int
|
147
|
+
vm_ci_argc(const struct rb_callinfo *ci)
|
148
|
+
{
|
149
|
+
if (vm_ci_packed_p(ci)) {
|
150
|
+
return (unsigned int)((((VALUE)ci) >> CI_EMBED_ARGC_SHFT) & CI_EMBED_ARGC_MASK);
|
151
|
+
}
|
152
|
+
else {
|
153
|
+
return (unsigned int)ci->argc;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
static inline const struct rb_callinfo_kwarg *
|
158
|
+
vm_ci_kwarg(const struct rb_callinfo *ci)
|
159
|
+
{
|
160
|
+
if (vm_ci_packed_p(ci)) {
|
161
|
+
return NULL;
|
162
|
+
}
|
163
|
+
else {
|
164
|
+
return ci->kwarg;
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
static inline void
|
169
|
+
vm_ci_dump(const struct rb_callinfo *ci)
|
170
|
+
{
|
171
|
+
if (vm_ci_packed_p(ci)) {
|
172
|
+
ruby_debug_printf("packed_ci ID:%s flag:%x argc:%u\n",
|
173
|
+
rb_id2name(vm_ci_mid(ci)), vm_ci_flag(ci), vm_ci_argc(ci));
|
174
|
+
}
|
175
|
+
else {
|
176
|
+
rp(ci);
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
#define vm_ci_new(mid, flag, argc, kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
|
181
|
+
#define vm_ci_new_runtime(mid, flag, argc, kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
|
182
|
+
|
183
|
+
/* This is passed to STATIC_ASSERT. Cannot be an inline function. */
|
184
|
+
#define VM_CI_EMBEDDABLE_P(mid, flag, argc, kwarg) \
|
185
|
+
(((mid ) & ~CI_EMBED_ID_MASK) ? false : \
|
186
|
+
((flag) & ~CI_EMBED_FLAG_MASK) ? false : \
|
187
|
+
((argc) & ~CI_EMBED_ARGC_MASK) ? false : \
|
188
|
+
(kwarg) ? false : true)
|
189
|
+
|
190
|
+
#define vm_ci_new_id(mid, flag, argc, must_zero) \
|
191
|
+
((const struct rb_callinfo *) \
|
192
|
+
((((VALUE)(mid )) << CI_EMBED_ID_SHFT) | \
|
193
|
+
(((VALUE)(flag)) << CI_EMBED_FLAG_SHFT) | \
|
194
|
+
(((VALUE)(argc)) << CI_EMBED_ARGC_SHFT) | \
|
195
|
+
RUBY_FIXNUM_FLAG))
|
196
|
+
|
197
|
+
static inline const struct rb_callinfo *
|
198
|
+
vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
|
199
|
+
{
|
200
|
+
#if USE_EMBED_CI
|
201
|
+
if (VM_CI_EMBEDDABLE_P(mid, flag, argc, kwarg)) {
|
202
|
+
RB_DEBUG_COUNTER_INC(ci_packed);
|
203
|
+
return vm_ci_new_id(mid, flag, argc, kwarg);
|
204
|
+
}
|
205
|
+
#endif
|
206
|
+
|
207
|
+
const bool debug = 0;
|
208
|
+
if (debug) ruby_debug_printf("%s:%d ", file, line);
|
209
|
+
|
210
|
+
// TODO: dedup
|
211
|
+
const struct rb_callinfo *ci = (const struct rb_callinfo *)
|
212
|
+
rb_imemo_new(imemo_callinfo,
|
213
|
+
(VALUE)mid,
|
214
|
+
(VALUE)flag,
|
215
|
+
(VALUE)argc,
|
216
|
+
(VALUE)kwarg);
|
217
|
+
if (debug) rp(ci);
|
218
|
+
if (kwarg) {
|
219
|
+
RB_DEBUG_COUNTER_INC(ci_kw);
|
220
|
+
}
|
221
|
+
else {
|
222
|
+
RB_DEBUG_COUNTER_INC(ci_nokw);
|
223
|
+
}
|
224
|
+
|
225
|
+
VM_ASSERT(vm_ci_flag(ci) == flag);
|
226
|
+
VM_ASSERT(vm_ci_argc(ci) == argc);
|
227
|
+
|
228
|
+
return ci;
|
229
|
+
}
|
230
|
+
|
231
|
+
|
232
|
+
static inline const struct rb_callinfo *
|
233
|
+
vm_ci_new_runtime_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
|
234
|
+
{
|
235
|
+
RB_DEBUG_COUNTER_INC(ci_runtime);
|
236
|
+
return vm_ci_new_(mid, flag, argc, kwarg, file, line);
|
237
|
+
}
|
238
|
+
|
239
|
+
#define VM_CALLINFO_NOT_UNDER_GC IMEMO_FL_USER0
|
240
|
+
|
241
|
+
static inline bool
|
242
|
+
vm_ci_markable(const struct rb_callinfo *ci)
|
243
|
+
{
|
244
|
+
if (! ci) {
|
245
|
+
return false; /* or true? This is Qfalse... */
|
246
|
+
}
|
247
|
+
else if (vm_ci_packed_p(ci)) {
|
248
|
+
return true;
|
249
|
+
}
|
250
|
+
else {
|
251
|
+
VM_ASSERT(IMEMO_TYPE_P(ci, imemo_callinfo));
|
252
|
+
return ! FL_ANY_RAW((VALUE)ci, VM_CALLINFO_NOT_UNDER_GC);
|
253
|
+
}
|
254
|
+
}
|
255
|
+
|
256
|
+
#define VM_CI_ON_STACK(mid_, flags_, argc_, kwarg_) \
|
257
|
+
(struct rb_callinfo) { \
|
258
|
+
.flags = T_IMEMO | \
|
259
|
+
(imemo_callinfo << FL_USHIFT) | \
|
260
|
+
VM_CALLINFO_NOT_UNDER_GC, \
|
261
|
+
.mid = mid_, \
|
262
|
+
.flag = flags_, \
|
263
|
+
.argc = argc_, \
|
264
|
+
.kwarg = kwarg_, \
|
265
|
+
}
|
266
|
+
|
267
|
+
typedef VALUE (*vm_call_handler)(
|
268
|
+
struct rb_execution_context_struct *ec,
|
269
|
+
struct rb_control_frame_struct *cfp,
|
270
|
+
struct rb_calling_info *calling);
|
271
|
+
|
272
|
+
// imemo_callcache
|
273
|
+
|
274
|
+
struct rb_callcache {
|
275
|
+
const VALUE flags;
|
276
|
+
|
277
|
+
/* inline cache: key */
|
278
|
+
const VALUE klass; // should not mark it because klass can not be free'd
|
279
|
+
// because of this marking. When klass is collected,
|
280
|
+
// cc will be cleared (cc->klass = 0) at vm_ccs_free().
|
281
|
+
|
282
|
+
/* inline cache: values */
|
283
|
+
const struct rb_callable_method_entry_struct * const cme_;
|
284
|
+
const vm_call_handler call_;
|
285
|
+
|
286
|
+
union {
|
287
|
+
const unsigned int attr_index;
|
288
|
+
const enum method_missing_reason method_missing_reason; /* used by method_missing */
|
289
|
+
VALUE v;
|
290
|
+
} aux_;
|
291
|
+
};
|
292
|
+
|
293
|
+
#define VM_CALLCACHE_UNMARKABLE IMEMO_FL_USER0
|
294
|
+
#define VM_CALLCACHE_ON_STACK IMEMO_FL_USER1
|
295
|
+
|
296
|
+
static inline const struct rb_callcache *
|
297
|
+
vm_cc_new(VALUE klass,
|
298
|
+
const struct rb_callable_method_entry_struct *cme,
|
299
|
+
vm_call_handler call)
|
300
|
+
{
|
301
|
+
const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
|
302
|
+
RB_DEBUG_COUNTER_INC(cc_new);
|
303
|
+
return cc;
|
304
|
+
}
|
305
|
+
|
306
|
+
#define VM_CC_ON_STACK(clazz, call, aux, cme) \
|
307
|
+
(struct rb_callcache) { \
|
308
|
+
.flags = T_IMEMO | \
|
309
|
+
(imemo_callcache << FL_USHIFT) | \
|
310
|
+
VM_CALLCACHE_UNMARKABLE | \
|
311
|
+
VM_CALLCACHE_ON_STACK, \
|
312
|
+
.klass = clazz, \
|
313
|
+
.cme_ = cme, \
|
314
|
+
.call_ = call, \
|
315
|
+
.aux_ = aux, \
|
316
|
+
}
|
317
|
+
|
318
|
+
static inline bool
|
319
|
+
vm_cc_class_check(const struct rb_callcache *cc, VALUE klass)
|
320
|
+
{
|
321
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
322
|
+
VM_ASSERT(cc->klass == 0 ||
|
323
|
+
RB_TYPE_P(cc->klass, T_CLASS) || RB_TYPE_P(cc->klass, T_ICLASS));
|
324
|
+
return cc->klass == klass;
|
325
|
+
}
|
326
|
+
|
327
|
+
static inline int
|
328
|
+
vm_cc_markable(const struct rb_callcache *cc)
|
329
|
+
{
|
330
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
331
|
+
return FL_TEST_RAW((VALUE)cc, VM_CALLCACHE_UNMARKABLE) == 0;
|
332
|
+
}
|
333
|
+
|
334
|
+
static inline const struct rb_callable_method_entry_struct *
|
335
|
+
vm_cc_cme(const struct rb_callcache *cc)
|
336
|
+
{
|
337
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
338
|
+
VM_ASSERT(cc->call_ == NULL || // not initialized yet
|
339
|
+
!vm_cc_markable(cc) ||
|
340
|
+
cc->cme_ != NULL);
|
341
|
+
|
342
|
+
return cc->cme_;
|
343
|
+
}
|
344
|
+
|
345
|
+
static inline vm_call_handler
|
346
|
+
vm_cc_call(const struct rb_callcache *cc)
|
347
|
+
{
|
348
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
349
|
+
VM_ASSERT(cc->call_ != NULL);
|
350
|
+
return cc->call_;
|
351
|
+
}
|
352
|
+
|
353
|
+
static inline unsigned int
|
354
|
+
vm_cc_attr_index(const struct rb_callcache *cc)
|
355
|
+
{
|
356
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
357
|
+
return cc->aux_.attr_index - 1;
|
358
|
+
}
|
359
|
+
|
360
|
+
static inline bool
|
361
|
+
vm_cc_attr_index_p(const struct rb_callcache *cc)
|
362
|
+
{
|
363
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
364
|
+
return cc->aux_.attr_index > 0;
|
365
|
+
}
|
366
|
+
|
367
|
+
static inline uint32_t
|
368
|
+
vm_ic_entry_index(const struct iseq_inline_iv_cache_entry *ic)
|
369
|
+
{
|
370
|
+
return ic->entry->index;
|
371
|
+
}
|
372
|
+
|
373
|
+
static inline bool
|
374
|
+
vm_ic_entry_p(const struct iseq_inline_iv_cache_entry *ic)
|
375
|
+
{
|
376
|
+
return ic->entry;
|
377
|
+
}
|
378
|
+
|
379
|
+
static inline unsigned int
|
380
|
+
vm_cc_cmethod_missing_reason(const struct rb_callcache *cc)
|
381
|
+
{
|
382
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
383
|
+
return cc->aux_.method_missing_reason;
|
384
|
+
}
|
385
|
+
|
386
|
+
static inline bool
|
387
|
+
vm_cc_invalidated_p(const struct rb_callcache *cc)
|
388
|
+
{
|
389
|
+
if (cc->klass && !METHOD_ENTRY_INVALIDATED(vm_cc_cme(cc))) {
|
390
|
+
return false;
|
391
|
+
}
|
392
|
+
else {
|
393
|
+
return true;
|
394
|
+
}
|
395
|
+
}
|
396
|
+
|
397
|
+
// For MJIT. cc_cme is supposed to have inlined `vm_cc_cme(cc)`.
|
398
|
+
static inline bool
|
399
|
+
vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass)
|
400
|
+
{
|
401
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
402
|
+
if (cc->klass == klass && !METHOD_ENTRY_INVALIDATED(cc_cme)) {
|
403
|
+
return 1;
|
404
|
+
}
|
405
|
+
else {
|
406
|
+
return 0;
|
407
|
+
}
|
408
|
+
}
|
409
|
+
|
410
|
+
extern const struct rb_callcache *rb_vm_empty_cc(void);
|
411
|
+
extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
|
412
|
+
#define vm_cc_empty() rb_vm_empty_cc()
|
413
|
+
|
414
|
+
/* callcache: mutate */
|
415
|
+
|
416
|
+
static inline void
|
417
|
+
vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
|
418
|
+
{
|
419
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
420
|
+
VM_ASSERT(cc != vm_cc_empty());
|
421
|
+
*(vm_call_handler *)&cc->call_ = call;
|
422
|
+
}
|
423
|
+
|
424
|
+
static inline void
|
425
|
+
vm_cc_attr_index_set(const struct rb_callcache *cc, int index)
|
426
|
+
{
|
427
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
428
|
+
VM_ASSERT(cc != vm_cc_empty());
|
429
|
+
*(int *)&cc->aux_.attr_index = index + 1;
|
430
|
+
}
|
431
|
+
|
432
|
+
static inline void
|
433
|
+
vm_ic_entry_set(struct iseq_inline_iv_cache_entry *ic, struct rb_iv_index_tbl_entry *entry, const rb_iseq_t *iseq)
|
434
|
+
{
|
435
|
+
ic->entry = entry;
|
436
|
+
RB_OBJ_WRITTEN(iseq, Qundef, entry->class_value);
|
437
|
+
}
|
438
|
+
|
439
|
+
static inline void
|
440
|
+
vm_cc_attr_index_initialize(const struct rb_callcache *cc)
|
441
|
+
{
|
442
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
443
|
+
VM_ASSERT(cc != vm_cc_empty());
|
444
|
+
*(int *)&cc->aux_.attr_index = 0;
|
445
|
+
}
|
446
|
+
|
447
|
+
static inline void
|
448
|
+
vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missing_reason reason)
|
449
|
+
{
|
450
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
451
|
+
VM_ASSERT(cc != vm_cc_empty());
|
452
|
+
*(enum method_missing_reason *)&cc->aux_.method_missing_reason = reason;
|
453
|
+
}
|
454
|
+
|
455
|
+
static inline void
|
456
|
+
vm_cc_invalidate(const struct rb_callcache *cc)
|
457
|
+
{
|
458
|
+
VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache));
|
459
|
+
VM_ASSERT(cc != vm_cc_empty());
|
460
|
+
VM_ASSERT(cc->klass != 0); // should be enable
|
461
|
+
|
462
|
+
*(VALUE *)&cc->klass = 0;
|
463
|
+
RB_DEBUG_COUNTER_INC(cc_ent_invalidate);
|
464
|
+
}
|
465
|
+
|
466
|
+
/* calldata */
|
467
|
+
|
468
|
+
struct rb_call_data {
|
469
|
+
const struct rb_callinfo *ci;
|
470
|
+
const struct rb_callcache *cc;
|
471
|
+
};
|
472
|
+
|
473
|
+
struct rb_class_cc_entries {
|
474
|
+
#if VM_CHECK_MODE > 0
|
475
|
+
VALUE debug_sig;
|
476
|
+
#endif
|
477
|
+
int capa;
|
478
|
+
int len;
|
479
|
+
const struct rb_callable_method_entry_struct *cme;
|
480
|
+
struct rb_class_cc_entries_entry {
|
481
|
+
const struct rb_callinfo *ci;
|
482
|
+
const struct rb_callcache *cc;
|
483
|
+
} *entries;
|
484
|
+
};
|
485
|
+
|
486
|
+
#if VM_CHECK_MODE > 0
|
487
|
+
|
488
|
+
const rb_callable_method_entry_t *rb_vm_lookup_overloaded_cme(const rb_callable_method_entry_t *cme);
|
489
|
+
void rb_vm_dump_overloaded_cme_table(void);
|
490
|
+
|
491
|
+
static inline bool
|
492
|
+
vm_ccs_p(const struct rb_class_cc_entries *ccs)
|
493
|
+
{
|
494
|
+
return ccs->debug_sig == ~(VALUE)ccs;
|
495
|
+
}
|
496
|
+
|
497
|
+
static inline bool
|
498
|
+
vm_cc_check_cme(const struct rb_callcache *cc, const rb_callable_method_entry_t *cme)
|
499
|
+
{
|
500
|
+
if (vm_cc_cme(cc) == cme ||
|
501
|
+
(cme->def->iseq_overload && vm_cc_cme(cc) == rb_vm_lookup_overloaded_cme(cme))) {
|
502
|
+
return true;
|
503
|
+
}
|
504
|
+
else {
|
505
|
+
#if 1
|
506
|
+
// debug print
|
507
|
+
|
508
|
+
fprintf(stderr, "iseq_overload:%d\n", (int)cme->def->iseq_overload);
|
509
|
+
rp(cme);
|
510
|
+
rp(vm_cc_cme(cc));
|
511
|
+
rb_vm_lookup_overloaded_cme(cme);
|
512
|
+
#endif
|
513
|
+
return false;
|
514
|
+
}
|
515
|
+
}
|
516
|
+
|
517
|
+
#endif
|
518
|
+
|
519
|
+
// gc.c
|
520
|
+
void rb_vm_ccs_free(struct rb_class_cc_entries *ccs);
|
521
|
+
|
522
|
+
#endif /* RUBY_VM_CALLINFO_H */
|