diff options
author | Peter Zhu <peter@peterzhu.ca> | 2023-11-10 11:27:49 -0500 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2023-11-10 11:27:49 -0500 |
commit | 5f3fb4f4e397735783743fe52a7899b614bece20 (patch) | |
tree | 07a7df0703e4ebe315458d45ccca3d9d7a59693e /vm_insnhelper.c | |
parent | 3b69637eba307a6e7a2951be0147e4811b77b535 (diff) | |
download | ruby-5f3fb4f4e397735783743fe52a7899b614bece20.tar.gz |
Revert "Remove SHAPE_CAPACITY_CHANGE shapes"
This reverts commit f6910a61122931e4193bcc0fad18d839c319b720.
We're seeing crashes in the test suite of Shopify's core monolith after
this change.
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index be70b93588..bea80ed588 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1460,11 +1460,11 @@ vm_setivar_default(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_i RUBY_ASSERT(dest_shape_id != INVALID_SHAPE_ID && shape_id != INVALID_SHAPE_ID); } else if (dest_shape_id != INVALID_SHAPE_ID) { - rb_shape_t *shape = rb_shape_get_shape_by_id(shape_id); rb_shape_t *dest_shape = rb_shape_get_shape_by_id(dest_shape_id); - if (shape_id == dest_shape->parent_id && dest_shape->edge_name == id && shape->capacity == dest_shape->capacity) { - RUBY_ASSERT(index < dest_shape->capacity); + if (shape_id == dest_shape->parent_id && dest_shape->edge_name == id && dest_shape->type == SHAPE_IVAR) { + RUBY_ASSERT(rb_shape_get_shape_by_id(shape_id)->capacity == dest_shape->capacity); + RUBY_ASSERT(index < rb_shape_get_shape_by_id(shape_id)->capacity); } else { return Qundef; @@ -1508,11 +1508,10 @@ vm_setivar(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t i VM_ASSERT(!rb_ractor_shareable_p(obj)); } else if (dest_shape_id != INVALID_SHAPE_ID) { - rb_shape_t *shape = rb_shape_get_shape_by_id(shape_id); rb_shape_t *dest_shape = rb_shape_get_shape_by_id(dest_shape_id); shape_id_t source_shape_id = dest_shape->parent_id; - if (shape_id == source_shape_id && dest_shape->edge_name == id && shape->capacity == dest_shape->capacity) { + if (shape_id == source_shape_id && dest_shape->edge_name == id) { RUBY_ASSERT(dest_shape_id != INVALID_SHAPE_ID && shape_id != INVALID_SHAPE_ID); ROBJECT_SET_SHAPE_ID(obj, dest_shape_id); |