diff options
author | Jean Boussier <[email protected]> | 2025-05-08 20:30:30 +0200 |
---|---|---|
committer | Jean Boussier <[email protected]> | 2025-05-09 10:22:51 +0200 |
commit | e0200cfba03bf7d23b6e298c35ca2636cbbdbd91 (patch) | |
tree | f38ade682e862be72229da0209e2372973306652 | |
parent | 3f7c0af05191c6120db1617fef1d5be18151dfe6 (diff) |
Refactor `rb_shape_transition_shape_remove_ivar` to not take a shape pointer
It's more consistent with other transition functions.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/13283
-rw-r--r-- | shape.c | 4 | ||||
-rw-r--r-- | shape.h | 2 | ||||
-rw-r--r-- | variable.c | 4 |
3 files changed, 5 insertions, 5 deletions
@@ -645,8 +645,10 @@ remove_shape_recursive(rb_shape_t *shape, ID id, rb_shape_t **removed_shape) } bool -rb_shape_transition_shape_remove_ivar(VALUE obj, ID id, rb_shape_t *shape, VALUE *removed) +rb_shape_transition_remove_ivar(VALUE obj, ID id, VALUE *removed) { + rb_shape_t *shape = rb_shape_get_shape(obj); + if (UNLIKELY(rb_shape_too_complex_p(shape))) { return false; } @@ -167,7 +167,7 @@ rb_shape_t *rb_shape_get_shape(VALUE obj); bool rb_shape_frozen_shape_p(rb_shape_t *shape); shape_id_t rb_shape_transition_frozen(VALUE obj); shape_id_t rb_shape_transition_complex(VALUE obj); -bool rb_shape_transition_shape_remove_ivar(VALUE obj, ID id, rb_shape_t *shape, VALUE *removed); +bool rb_shape_transition_remove_ivar(VALUE obj, ID id, VALUE *removed); rb_shape_t *rb_shape_get_next(rb_shape_t *shape, VALUE obj, ID id); rb_shape_t *rb_shape_get_next_no_warnings(rb_shape_t *shape, VALUE obj, ID id); rb_shape_t *rb_shape_object_id_shape(VALUE obj); diff --git a/variable.c b/variable.c index f914e5a8f8..92206e4b11 100644 --- a/variable.c +++ b/variable.c @@ -1460,13 +1460,11 @@ rb_ivar_delete(VALUE obj, ID id, VALUE undef) rb_check_frozen(obj); VALUE val = undef; - rb_shape_t *shape = rb_shape_get_shape(obj); - if (BUILTIN_TYPE(obj) == T_CLASS || BUILTIN_TYPE(obj) == T_MODULE) { IVAR_ACCESSOR_SHOULD_BE_MAIN_RACTOR(id); } - if (!rb_shape_transition_shape_remove_ivar(obj, id, shape, &val)) { + if (!rb_shape_transition_remove_ivar(obj, id, &val)) { if (!rb_shape_obj_too_complex_p(obj)) { rb_evict_fields_to_hash(obj); } |