From da5b7fa769442b41a3dc67f2a8ab9db399910508 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Fri, 21 Apr 2017 17:23:54 +0900 Subject: Support freeze in `Struct`. --- mrbgems/mruby-struct/src/struct.c | 14 ++++++++++++-- mrbgems/mruby-struct/test/struct.rb | 13 +++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) (limited to 'mrbgems/mruby-struct') diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index b28fa1da7..c5fd34754 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -84,6 +84,16 @@ mrb_struct_s_members_m(mrb_state *mrb, mrb_value klass) return ary; } +static void +mrb_struct_modify(mrb_state *mrb, mrb_value strct) +{ + if (MRB_FROZEN_P(mrb_basic_ptr(strct))) { + mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen struct"); + } + + mrb_write_barrier(mrb, mrb_basic_ptr(strct)); +} + /* 15.2.18.4.6 */ /* * call-seq: @@ -448,8 +458,8 @@ mrb_struct_aset_sym(mrb_state *mrb, mrb_value s, mrb_sym id, mrb_value val) ptr_members = RARRAY_PTR(members); for (i=0; i