mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Move object_id
in object fields.
And get rid of the `obj_to_id_tbl` It's no longer needed, the `object_id` is now stored inline in the object alongside instance variables. We still need the inverse table in case `_id2ref` is invoked, but we lazily build it by walking the heap if that happens. The `object_id` concern is also no longer a GC implementation concern, but a generic implementation. Co-Authored-By: Matt Valentine-House <matt@eightbitraptor.com>
This commit is contained in:
parent
d34c150547
commit
f48e45d1e9
Notes:
git
2025-05-08 05:58:19 +00:00
23 changed files with 1140 additions and 560 deletions
|
@ -805,29 +805,29 @@ shape_i(rb_shape_t *shape, void *data)
|
|||
dump_append(dc, ", \"depth\":");
|
||||
dump_append_sizet(dc, rb_shape_depth(shape));
|
||||
|
||||
dump_append(dc, ", \"shape_type\":");
|
||||
switch((enum shape_type)shape->type) {
|
||||
case SHAPE_ROOT:
|
||||
dump_append(dc, "\"ROOT\"");
|
||||
dump_append(dc, ", \"shape_type\":\"ROOT\"");
|
||||
break;
|
||||
case SHAPE_IVAR:
|
||||
dump_append(dc, "\"IVAR\"");
|
||||
dump_append(dc, ", \"shape_type\":\"IVAR\"");
|
||||
|
||||
dump_append(dc, ",\"edge_name\":");
|
||||
dump_append_id(dc, shape->edge_name);
|
||||
|
||||
break;
|
||||
case SHAPE_FROZEN:
|
||||
dump_append(dc, "\"FROZEN\"");
|
||||
dump_append(dc, ", \"shape_type\":\"FROZEN\"");
|
||||
break;
|
||||
case SHAPE_T_OBJECT:
|
||||
dump_append(dc, "\"T_OBJECT\"");
|
||||
dump_append(dc, ", \"shape_type\":\"T_OBJECT\"");
|
||||
break;
|
||||
case SHAPE_OBJ_TOO_COMPLEX:
|
||||
dump_append(dc, "\"OBJ_TOO_COMPLEX\"");
|
||||
dump_append(dc, ", \"shape_type\":\"OBJ_TOO_COMPLEX\"");
|
||||
break;
|
||||
case SHAPE_OBJ_ID:
|
||||
dump_append(dc, ", \"shape_type\":\"OBJ_ID\"");
|
||||
break;
|
||||
default:
|
||||
rb_bug("[objspace] unexpected shape type");
|
||||
}
|
||||
|
||||
dump_append(dc, ", \"edges\":");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue