RubyCall::Helpers
Constants
Class methods
--- главный драйвер вызова -------------------------------------------------------- data-массив: [recv, mid(fix), argc(fix), block_id(fix), *args, kw_hash|nil] Контейнер рутируется сам; все промежуточные VALUE — на стеке обычных методов воркера.
Трамплин rb_protect: локальные — на стеке воркера → видны GC MRI.
kwargs-хеш: в Ruby 3 ключевые слова обязаны иметь символьные ключи (строковые → ArgumentError: missing keywords).
--- keep-слоты: временный корень для VALUE на время операции -----------------
--- fixnum-кодирование (immidiate, без GC) ------------------------------ LONG2FIX / FIX2LONG: fixnum = (x << 1) | 1
rb_num2ll может кинуть RangeError (bignum > i64) — через protect, вызывающий при переполнении оставит объект обёрткой.
--- rb_protect-обёртка --------------------------------------------------------- tramp — нетипизированный трамплин (->Helpers.xxx); data — VALUE, уже укоренённый (контейнер/слот/стек). При state != 0 вытаскиваем rb_errinfo, чистим его и кидаем RubyError.
Спец-константы определяем в рантайме (eval nil/true/false) — не хардкодим биты VALUE.