Refactor: Improve Set GC marking and freeing

This commit addresses feedback on the initial Set GC marking implementation.

Changes include:
- Renamed set marking function to `mrb_gc_mark_set` and updated its
  return type to `size_t`.
- Introduced an explicit `mrb_gc_free_set` function for Set objects.
- Updated `gc_mark_children` to use the new mark function signature.
- Added an explicit `case MRB_TT_SET:` in `obj_free` to call `mrb_gc_free_set`.
- Adjusted `set_get_khash` in `mruby-set` to work with `MRB_TT_SET` directly,
  rather than relying on `mrb_data_get_ptr`.
- Corrected type checks in `set_init_copy` to use `MRB_TT_SET`.
- Updated function prototypes in internal headers and stubs in mrbc.
This commit is contained in:
google-labs-jules[bot]
2025-06-24 04:02:41 +00:00
parent 4e08fae75a
commit dfd7251223
6 changed files with 77 additions and 5 deletions
+11
View File
@@ -729,6 +729,11 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
children += mrb_rational_mark(mrb, obj);
break;
#endif
#ifdef MRB_USE_SET
case MRB_TT_SET:
children += mrb_gc_mark_set(mrb, obj);
break;
#endif
default:
break;
@@ -841,6 +846,12 @@ obj_free(mrb_state *mrb, struct RBasic *obj, mrb_bool end)
mrb_gc_free_range(mrb, ((struct RRange*)obj));
break;
#ifdef MRB_USE_SET
case MRB_TT_SET:
mrb_gc_free_set(mrb, obj);
break;
#endif
case MRB_TT_CDATA:
{
struct RData *d = (struct RData*)obj;