Added a class to hold ruby objects.

This commit is contained in:
2026-11-04 09:08:59 +00:00
parent 1eba06f19b
commit 74557e5647
+29
View File
@@ -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) { inline void run_string(const char *code, size_t length) {
int ai = mrb_gc_arena_save(mrb); int ai = mrb_gc_arena_save(mrb);
mrb_load_nstring(mrb, code, length); mrb_load_nstring(mrb, code, length);