summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-10-31 23:34:08 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-10-31 23:34:08 +0900
commitaf03812877c914de787e70735eb89084434b21f1 (patch)
treec85caab5e6eb09e7584543753eb2dfa7bd41fa35
parent0fe744f9192bda774749de7d8426033ae9cfd084 (diff)
downloadmruby-af03812877c914de787e70735eb89084434b21f1.tar.gz
mruby-af03812877c914de787e70735eb89084434b21f1.zip
add mrb_ary_modify(mrb,a); you have to ensure mrb_value a to be an array; ref #1554
-rw-r--r--include/mruby/array.h1
-rw-r--r--src/array.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/include/mruby/array.h b/include/mruby/array.h
index 29f9be55e..60088c98a 100644
--- a/include/mruby/array.h
+++ b/include/mruby/array.h
@@ -35,6 +35,7 @@ struct RArray {
#define RARRAY_PTR(a) (RARRAY(a)->ptr)
#define MRB_ARY_SHARED 256
+void mrb_ary_modify(mrb_state*, mrb_value);
void mrb_ary_decref(mrb_state*, mrb_shared_array*);
mrb_value mrb_ary_new_capa(mrb_state*, mrb_int);
mrb_value mrb_ary_new(mrb_state *mrb);
diff --git a/src/array.c b/src/array.c
index 526cf4973..705aece07 100644
--- a/src/array.c
+++ b/src/array.c
@@ -138,6 +138,16 @@ ary_modify(mrb_state *mrb, struct RArray *a)
}
}
+void
+mrb_ary_modify(mrb_state *mrb, mrb_value ary)
+{
+ struct RArray *a;
+
+ a = mrb_ary_ptr(ary);
+ mrb_write_barrier(mrb, (struct RBasic*)a);
+ ary_modify(mrb, a);
+}
+
static void
ary_make_shared(mrb_state *mrb, struct RArray *a)
{