From 74557e564713a51b57a777a629f281eec082b746 Mon Sep 17 00:00:00 2001 From: Syed Daanish Date: Wed, 4 Nov 2026 09:08:59 +0000 Subject: [PATCH] Added a class to hold ruby objects. --- include/bindings/ruby.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/bindings/ruby.h b/include/bindings/ruby.h index 7a5db28..6c29bac 100644 --- a/include/bindings/ruby.h +++ b/include/bindings/ruby.h @@ -88,6 +88,35 @@ struct Block { } }; +struct RubyObject { + mrb_value val; + + RubyObject(mrb_value val) : val(val) { + mrb_gc_register(mrb, val); + } + + RubyObject() : val(mrb_nil_value()) {} + + ~RubyObject() { + if (!mrb_nil_p(val)) + mrb_gc_unregister(mrb, val); + } + + void set_proc(mrb_value new_proc) { + if (!mrb_nil_p(val)) + mrb_gc_unregister(mrb, val); + val = new_proc; + mrb_gc_register(mrb, val); + } + + RubyObject(const RubyObject &) = delete; + RubyObject &operator=(const RubyObject &) = delete; + + mrb_value get() { + return val; + } +}; + inline void run_string(const char *code, size_t length) { int ai = mrb_gc_arena_save(mrb); mrb_load_nstring(mrb, code, length);