mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Extract frozen checking to function
This commit is contained in:
+1
-3
@@ -120,9 +120,7 @@ ary_fill_with_nil(mrb_value *ptr, mrb_int size)
|
||||
static void
|
||||
ary_modify_check(mrb_state *mrb, struct RArray *a)
|
||||
{
|
||||
if (MRB_FROZEN_P(a)) {
|
||||
mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen array");
|
||||
}
|
||||
mrb_check_frozen(mrb, a);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
+1
-6
@@ -441,12 +441,7 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_
|
||||
MRB_CLASS_ORIGIN(c);
|
||||
h = c->mt;
|
||||
|
||||
if (MRB_FROZEN_P(c)) {
|
||||
if (c->tt == MRB_TT_MODULE)
|
||||
mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen module");
|
||||
else
|
||||
mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen class");
|
||||
}
|
||||
mrb_check_frozen(mrb, c);
|
||||
if (!h) h = c->mt = kh_init(mt, mrb);
|
||||
k = kh_put(mt, mrb, h, mid);
|
||||
kh_value(h, k) = m;
|
||||
|
||||
@@ -484,6 +484,13 @@ mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_value args, char const* fmt,
|
||||
mrb_exc_raise(mrb, exc);
|
||||
}
|
||||
|
||||
MRB_API mrb_noreturn void
|
||||
mrb_frozen_error(mrb_state *mrb, void *frozen_obj)
|
||||
{
|
||||
mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %S",
|
||||
mrb_obj_value(mrb_class(mrb, mrb_obj_value(frozen_obj))));
|
||||
}
|
||||
|
||||
void
|
||||
mrb_init_exception(mrb_state *mrb)
|
||||
{
|
||||
|
||||
+1
-4
@@ -746,10 +746,7 @@ mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val)
|
||||
static void
|
||||
mrb_hash_modify(mrb_state *mrb, mrb_value hash)
|
||||
{
|
||||
if (MRB_FROZEN_P(mrb_hash_ptr(hash))) {
|
||||
mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen hash");
|
||||
}
|
||||
|
||||
mrb_check_frozen(mrb, mrb_hash_ptr(hash));
|
||||
if (!RHASH_TBL(hash)) {
|
||||
RHASH_TBL(hash) = ht_new(mrb);
|
||||
}
|
||||
|
||||
+2
-10
@@ -493,20 +493,12 @@ str_index_str(mrb_state *mrb, mrb_value str, mrb_value str2, mrb_int offset)
|
||||
return mrb_str_index(mrb, str, ptr, len, offset);
|
||||
}
|
||||
|
||||
static void
|
||||
check_frozen(mrb_state *mrb, struct RString *s)
|
||||
{
|
||||
if (MRB_FROZEN_P(s)) {
|
||||
mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen string");
|
||||
}
|
||||
}
|
||||
|
||||
static mrb_value
|
||||
str_replace(mrb_state *mrb, struct RString *s1, struct RString *s2)
|
||||
{
|
||||
mrb_int len;
|
||||
|
||||
check_frozen(mrb, s1);
|
||||
mrb_check_frozen(mrb, s1);
|
||||
if (s1 == s2) return mrb_obj_value(s1);
|
||||
s1->flags &= ~MRB_STR_NO_UTF;
|
||||
s1->flags |= s2->flags&MRB_STR_NO_UTF;
|
||||
@@ -646,7 +638,7 @@ mrb_locale_from_utf8(const char *utf8, int len)
|
||||
MRB_API void
|
||||
mrb_str_modify(mrb_state *mrb, struct RString *s)
|
||||
{
|
||||
check_frozen(mrb, s);
|
||||
mrb_check_frozen(mrb, s);
|
||||
s->flags &= ~MRB_STR_NO_UTF;
|
||||
if (RSTR_SHARED_P(s)) {
|
||||
mrb_shared_string *shared = s->as.heap.aux.shared;
|
||||
|
||||
+1
-3
@@ -346,9 +346,7 @@ mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v)
|
||||
{
|
||||
iv_tbl *t;
|
||||
|
||||
if (MRB_FROZEN_P(obj)) {
|
||||
mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %S", mrb_obj_value(obj));
|
||||
}
|
||||
mrb_check_frozen(mrb, obj);
|
||||
assign_class_name(mrb, obj, sym, v);
|
||||
if (!obj->iv) {
|
||||
obj->iv = iv_new(mrb);
|
||||
|
||||
Reference in New Issue
Block a user