From af03812877c914de787e70735eb89084434b21f1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 31 Oct 2013 23:34:08 +0900 Subject: add mrb_ary_modify(mrb,a); you have to ensure mrb_value a to be an array; ref #1554 --- include/mruby/array.h | 1 + src/array.c | 10 ++++++++++ 2 files changed, 11 insertions(+) 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) { -- cgit v1.2.3