class.c (mrb_gc_mark_mt_size) unify with mrb_gc_mark_mt

This commit is contained in:
Yukihiro "Matz" Matsumoto
2024-03-14 11:58:00 +09:00
parent 2cb3f1d9e5
commit f13daee2f5
3 changed files with 11 additions and 19 deletions
+1 -2
View File
@@ -74,8 +74,7 @@ struct mrb_backtrace_location {
};
/* gc */
void mrb_gc_mark_mt(mrb_state*, struct RClass*);
size_t mrb_gc_mark_mt_size(mrb_state*, struct RClass*);
size_t mrb_gc_mark_mt(mrb_state*, struct RClass*);
void mrb_gc_free_mt(mrb_state*, struct RClass*);
/* hash */
+6 -14
View File
@@ -281,14 +281,14 @@ mrb_mt_foreach(mrb_state *mrb, struct RClass *c, mrb_mt_foreach_func *fn, void *
return;
}
void
size_t
mrb_gc_mark_mt(mrb_state *mrb, struct RClass *c)
{
mt_tbl *t = c->mt;
if (t == NULL) return;
if (t->alloc == 0) return;
if (t->size == 0) return;
if (t == NULL) return 0;
if (t->alloc == 0) return 0;
if (t->size == 0) return 0;
mrb_sym *keys = (mrb_sym*)&t->ptr[t->alloc];
union mt_ptr *vals = t->ptr;
@@ -298,16 +298,8 @@ mrb_gc_mark_mt(mrb_state *mrb, struct RClass *c)
mrb_gc_mark(mrb, (struct RBasic*)p);
}
}
return;
}
size_t
mrb_gc_mark_mt_size(mrb_state *mrb, struct RClass *c)
{
struct mt_tbl *h = c->mt;
if (!h) return 0;
return (size_t)h->size;
if (!t) return 0;
return (size_t)t->size;
}
size_t
+4 -3
View File
@@ -588,8 +588,9 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
case MRB_TT_ICLASS:
{
struct RClass *c = (struct RClass*)obj;
if (MRB_FLAG_TEST(c, MRB_FL_CLASS_IS_ORIGIN))
mrb_gc_mark_mt(mrb, c);
if (MRB_FLAG_TEST(c, MRB_FL_CLASS_IS_ORIGIN)) {
children += mrb_gc_mark_mt(mrb, c);
}
mrb_gc_mark(mrb, (struct RBasic*)((struct RClass*)obj)->super);
children++;
}
@@ -603,7 +604,7 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
mrb_gc_mark_mt(mrb, c);
mrb_gc_mark(mrb, (struct RBasic*)c->super);
children += mrb_gc_mark_mt_size(mrb, c);
children += mrb_gc_mark_mt(mrb, c);
children++;
}
/* fall through */