From f13daee2f512c5ba5b78a29a2d08a950d301d09e Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 14 Mar 2024 11:58:00 +0900 Subject: [PATCH] class.c (mrb_gc_mark_mt_size) unify with mrb_gc_mark_mt --- include/mruby/internal.h | 3 +-- src/class.c | 20 ++++++-------------- src/gc.c | 7 ++++--- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/include/mruby/internal.h b/include/mruby/internal.h index 5abd648dd..a180f6f77 100644 --- a/include/mruby/internal.h +++ b/include/mruby/internal.h @@ -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 */ diff --git a/src/class.c b/src/class.c index c5eba0299..ade36fad6 100644 --- a/src/class.c +++ b/src/class.c @@ -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 diff --git a/src/gc.c b/src/gc.c index 818892049..848c95f55 100644 --- a/src/gc.c +++ b/src/gc.c @@ -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 */