Revert "Reserve 2 bits for expressing object layout (#17139)"

This reverts commit 63d9f090b5.
This commit is contained in:
Aaron Patterson committed 2026-05-29 16:41:31 -07:00
1 parent 63d9f090b5
commit ddb5055d96
14 files changed
+44 -216

No files matched your search

+9 -13
View File
@@ -1343,7 +1343,7 @@ rb_free_generic_ivar(VALUE obj)
}
}
}
RBASIC_SET_SHAPE_ID(obj, rb_shape_layout(RBASIC_SHAPE_ID(obj)) | ROOT_SHAPE_ID);
RBASIC_SET_SHAPE_ID(obj, ROOT_SHAPE_ID);
}
}
@@ -1395,7 +1395,7 @@ rb_obj_set_fields(VALUE obj, VALUE fields_obj, ID field_name, VALUE original_fie
}
}
RBASIC_SET_SHAPE_ID(obj, rb_shape_layout(RBASIC_SHAPE_ID(obj)) | RBASIC_SHAPE_ID(fields_obj));
RBASIC_SET_SHAPE_ID(obj, RBASIC_SHAPE_ID(fields_obj));
}
void
@@ -1710,7 +1710,6 @@ rb_ivar_delete(VALUE obj, ID id, VALUE undef)
size_t trailing_fields = new_fields_count - removed_index;
MEMMOVE(&fields[removed_index], &fields[removed_index + 1], VALUE, trailing_fields);
RUBY_ASSERT(rb_shape_layout(next_shape_id) == SHAPE_ID_LAYOUT_ROBJECT);
RBASIC_SET_SHAPE_ID(fields_obj, next_shape_id);
if (FL_TEST_RAW(fields_obj, OBJ_FIELD_HEAP)) {
@@ -1733,7 +1732,7 @@ rb_ivar_delete(VALUE obj, ID id, VALUE undef)
}
}
RBASIC_SET_SHAPE_ID(obj, rb_shape_layout(RBASIC_SHAPE_ID(obj)) | next_shape_id);
RBASIC_SET_SHAPE_ID(obj, next_shape_id);
if (fields_obj != original_fields_obj) {
switch (type) {
case T_OBJECT:
@@ -1844,7 +1843,7 @@ imemo_fields_set(VALUE owner, VALUE fields_obj, shape_id_t target_shape_id, ID f
RUBY_ASSERT(field_name);
st_insert(table, (st_data_t)field_name, (st_data_t)val);
RB_OBJ_WRITTEN(fields_obj, Qundef, val);
RBASIC_SET_SHAPE_ID(fields_obj, rb_shape_id_with_robject_layout(target_shape_id));
RBASIC_SET_SHAPE_ID(fields_obj, target_shape_id);
}
else {
attr_index_t index = RSHAPE_INDEX(target_shape_id);
@@ -1856,7 +1855,7 @@ imemo_fields_set(VALUE owner, VALUE fields_obj, shape_id_t target_shape_id, ID f
RB_OBJ_WRITE(fields_obj, &table[index], val);
if (index >= RSHAPE_LEN(current_shape_id)) {
RBASIC_SET_SHAPE_ID(fields_obj, rb_shape_id_with_robject_layout(target_shape_id));
RBASIC_SET_SHAPE_ID(fields_obj, target_shape_id);
}
}
@@ -2011,12 +2010,11 @@ rb_obj_freeze_inline(VALUE x)
RB_FL_UNSET_RAW(x, FL_USER2 | FL_USER3); // STR_CHILLED
}
// rb_obj_freeze_inline(String)
shape_id_t shape_id = rb_obj_shape_transition_frozen(x);
switch (BUILTIN_TYPE(x)) {
case T_CLASS:
case T_MODULE:
rb_obj_freeze_inline(RCLASS_WRITABLE_ENSURE_FIELDS_OBJ(x));
RBASIC_SET_SHAPE_ID(RCLASS_WRITABLE_ENSURE_FIELDS_OBJ(x), shape_id);
// FIXME: How to do multi-shape?
RBASIC_SET_SHAPE_ID(x, shape_id);
break;
@@ -2305,7 +2303,7 @@ rb_copy_generic_ivar(VALUE dest, VALUE obj)
}
if (!RSHAPE_LEN(dest_shape_id)) {
RBASIC_SET_SHAPE_ID(dest, rb_shape_layout(RBASIC_SHAPE_ID(dest)) | dest_shape_id);
RBASIC_SET_SHAPE_ID(dest, dest_shape_id);
return;
}
@@ -4638,7 +4636,6 @@ class_fields_ivar_set(VALUE klass, VALUE fields_obj, ID id, VALUE val, bool conc
}
if (new_ivar) {
RUBY_ASSERT(rb_shape_layout(next_shape_id) == SHAPE_ID_LAYOUT_ROBJECT);
RBASIC_SET_SHAPE_ID(fields_obj, next_shape_id);
}
}
@@ -4661,7 +4658,6 @@ complex:
RB_OBJ_WRITTEN(fields_obj, Qundef, val);
if (fields_obj != original_fields_obj) {
RUBY_ASSERT(rb_shape_layout(next_shape_id) == SHAPE_ID_LAYOUT_ROBJECT);
RBASIC_SET_SHAPE_ID(fields_obj, next_shape_id);
}
}
@@ -4688,7 +4684,7 @@ class_ivar_set(VALUE obj, ID id, VALUE val, bool *new_ivar)
// TODO: What should we set as the T_CLASS shape_id?
// In most case we can replicate the single `fields_obj` shape
// but in namespaced case? Perhaps INVALID_SHAPE_ID?
RBASIC_SET_SHAPE_ID(obj, rb_shape_layout(RBASIC_SHAPE_ID(obj)) | RBASIC_SHAPE_ID(new_fields_obj));
RBASIC_SET_SHAPE_ID(obj, RBASIC_SHAPE_ID(new_fields_obj));
return index;
}
@@ -4713,7 +4709,7 @@ rb_fields_tbl_copy(VALUE dst, VALUE src)
VALUE fields_obj = RCLASS_WRITABLE_FIELDS_OBJ(src);
if (fields_obj) {
RCLASS_WRITABLE_SET_FIELDS_OBJ(dst, rb_imemo_fields_clone(fields_obj));
RBASIC_SET_SHAPE_ID(dst, rb_shape_layout(RBASIC_SHAPE_ID(dst)) | RBASIC_SHAPE_ID(src));
RBASIC_SET_SHAPE_ID(dst, RBASIC_SHAPE_ID(src));
}
}