diff options
| author | Jean Boussier <jean.boussier@gmail.com> | 2025-08-26 17:43:11 +0200 |
|---|---|---|
| committer | Jean Boussier <jean.boussier@gmail.com> | 2025-08-27 12:41:07 +0200 |
| commit | 5257e1298c4dc4e854eaa0a9fe5e6dc5c1495c91 (patch) | |
| tree | 1423a3e9ae3e754d04db17754b8454d6724b6d9f /variable.c | |
| parent | 5ff7b2c582a56fe7d92248adf093fd278a334066 (diff) | |
Replace ROBJECT_EMBED by ROBJECT_HEAP
The embed layout is way more common than the heap one,
especially since WVA.
I think it makes for more readable code to inverse the
flag.
Diffstat (limited to 'variable.c')
| -rw-r--r-- | variable.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/variable.c b/variable.c index b5620af27b..b0c364af59 100644 --- a/variable.c +++ b/variable.c @@ -1480,11 +1480,11 @@ obj_transition_too_complex(VALUE obj, st_table *table) case T_OBJECT: { VALUE *old_fields = NULL; - if (FL_TEST_RAW(obj, ROBJECT_EMBED)) { - FL_UNSET_RAW(obj, ROBJECT_EMBED); + if (FL_TEST_RAW(obj, ROBJECT_HEAP)) { + old_fields = ROBJECT_FIELDS(obj); } else { - old_fields = ROBJECT_FIELDS(obj); + FL_SET_RAW(obj, ROBJECT_HEAP); } RBASIC_SET_SHAPE_ID(obj, shape_id); ROBJECT_SET_FIELDS_HASH(obj, table); @@ -1614,12 +1614,12 @@ rb_ivar_delete(VALUE obj, ID id, VALUE undef) } if (RB_TYPE_P(obj, T_OBJECT) && - !RB_FL_TEST_RAW(obj, ROBJECT_EMBED) && + FL_TEST_RAW(obj, ROBJECT_HEAP) && rb_obj_embedded_size(new_fields_count) <= rb_gc_obj_slot_size(obj)) { // Re-embed objects when instances become small enough // This is necessary because YJIT assumes that objects with the same shape // have the same embeddedness for efficiency (avoid extra checks) - RB_FL_SET_RAW(obj, ROBJECT_EMBED); + FL_UNSET_RAW(obj, ROBJECT_HEAP); MEMCPY(ROBJECT_FIELDS(obj), fields, VALUE, new_fields_count); xfree(fields); } @@ -1813,16 +1813,16 @@ rb_ensure_iv_list_size(VALUE obj, uint32_t current_len, uint32_t new_capacity) { RUBY_ASSERT(!rb_shape_obj_too_complex_p(obj)); - if (RBASIC(obj)->flags & ROBJECT_EMBED) { + if (FL_TEST_RAW(obj, ROBJECT_HEAP)) { + REALLOC_N(ROBJECT(obj)->as.heap.fields, VALUE, new_capacity); + } + else { VALUE *ptr = ROBJECT_FIELDS(obj); VALUE *newptr = ALLOC_N(VALUE, new_capacity); MEMCPY(newptr, ptr, VALUE, current_len); - RB_FL_UNSET_RAW(obj, ROBJECT_EMBED); + FL_SET_RAW(obj, ROBJECT_HEAP); ROBJECT(obj)->as.heap.fields = newptr; } - else { - REALLOC_N(ROBJECT(obj)->as.heap.fields, VALUE, new_capacity); - } } static int |
