mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
new function mrb_obj_iv_ifnone()
This commit is contained in:
@@ -41,6 +41,7 @@ int mrb_const_defined(mrb_state*, mrb_value, mrb_sym);
|
||||
mrb_value mrb_obj_iv_get(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
|
||||
void mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
|
||||
int mrb_obj_iv_defined(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
|
||||
void mrb_obj_iv_ifnone(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
|
||||
mrb_value mrb_iv_get(mrb_state *mrb, mrb_value obj, mrb_sym sym);
|
||||
void mrb_iv_set(mrb_state *mrb, mrb_value obj, mrb_sym sym, mrb_value v);
|
||||
int mrb_iv_defined(mrb_state*, mrb_value, mrb_sym);
|
||||
|
||||
@@ -460,6 +460,21 @@ mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v)
|
||||
iv_put(mrb, t, sym, v);
|
||||
}
|
||||
|
||||
void
|
||||
mrb_obj_iv_ifnone(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v)
|
||||
{
|
||||
iv_tbl *t = obj->iv;
|
||||
|
||||
if (!t) {
|
||||
t = obj->iv = iv_new(mrb);
|
||||
}
|
||||
else if (iv_get(mrb, t, sym, &v)) {
|
||||
return;
|
||||
}
|
||||
mrb_write_barrier(mrb, (struct RBasic*)obj);
|
||||
iv_put(mrb, t, sym, v);
|
||||
}
|
||||
|
||||
void
|
||||
mrb_iv_set(mrb_state *mrb, mrb_value obj, mrb_sym sym, mrb_value v)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user