summaryrefslogtreecommitdiffhomepage
path: root/src/variable.c
diff options
context:
space:
mode:
authorYukihiro Matz Matsumoto <[email protected]>2012-12-12 18:22:23 +0900
committerYukihiro Matz Matsumoto <[email protected]>2012-12-12 18:22:23 +0900
commitf63d5c290510965e1256e4fac77709da83a6719a (patch)
treeeb93951410ec73c29a7cc9288c24a7eabdfc3098 /src/variable.c
parent2a5d82885ae5b0c0f2de1e7a62e9b0bbec1294a7 (diff)
downloadmruby-f63d5c290510965e1256e4fac77709da83a6719a.tar.gz
mruby-f63d5c290510965e1256e4fac77709da83a6719a.zip
new function mrb_obj_iv_ifnone()
Diffstat (limited to 'src/variable.c')
-rw-r--r--src/variable.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/variable.c b/src/variable.c
index 6907a8e2a..992663408 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -461,6 +461,21 @@ mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value 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)
{
if (obj_iv_p(obj)) {