From edc49f9d2624fa39780ae917053e2bc12fdf1875 Mon Sep 17 00:00:00 2001 From: dearblue Date: Thu, 22 Oct 2020 23:22:29 +0900 Subject: Prohibit array changes by `mrb_get_argv()` The `mrb_get_argv()` function will now return `const mrb_value *`. This is because it is difficult for the caller to check if it is a splat argument (array object) and to write-barrier if necessary. --- include/mruby.h | 2 +- src/array.c | 4 ++-- src/class.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index 52bcd58bf..c463a47db 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -991,7 +991,7 @@ MRB_API mrb_int mrb_get_argc(mrb_state *mrb); * * Correctly handles *splat arguments. */ -MRB_API mrb_value* mrb_get_argv(mrb_state *mrb); +MRB_API const mrb_value *mrb_get_argv(mrb_state *mrb); /** * Retrieve the first and only argument from mrb_state. diff --git a/src/array.c b/src/array.c index c4bc554ef..e1e97a1d8 100644 --- a/src/array.c +++ b/src/array.c @@ -509,7 +509,7 @@ static mrb_value mrb_ary_push_m(mrb_state *mrb, mrb_value self) { mrb_int argc; - mrb_value *argv; + const mrb_value *argv; mrb_int len, len2; struct RArray *a; @@ -947,7 +947,7 @@ mrb_ary_aset(mrb_state *mrb, mrb_value self) ary_modify(mrb, mrb_ary_ptr(self)); if (mrb_get_argc(mrb) == 2) { - mrb_value *vs = mrb_get_argv(mrb); + const mrb_value *vs = mrb_get_argv(mrb); v1 = vs[0]; v2 = vs[1]; /* a[n..m] = v */ diff --git a/src/class.c b/src/class.c index bbf64e8ea..eb472900c 100644 --- a/src/class.c +++ b/src/class.c @@ -806,7 +806,7 @@ mrb_get_argc(mrb_state *mrb) return argc; } -MRB_API mrb_value* +MRB_API const mrb_value* mrb_get_argv(mrb_state *mrb) { mrb_int argc = mrb->c->ci->argc; -- cgit v1.2.3