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) {
|
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user