Added a class to hold ruby objects.
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user