summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorJean Boussier <[email protected]>2025-04-21 12:01:01 +0900
committerJean Boussier <[email protected]>2025-05-08 07:58:05 +0200
commitd34c15054708c84e9d3305ede0752820b42ac498 (patch)
treef961697097f2a560edf636701809e5d1c96e66ee /object.c
parent6c9b3ac232fc65f6019af28ec836aa59b8657b70 (diff)
shape.c: refactor frozen shape to no longer be final
This opens the door to store more informations in shapes, such as the `object_id` or object address in case it has been observed and the object has to be moved.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/13159
Diffstat (limited to 'object.c')
-rw-r--r--object.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/object.c b/object.c
index 99ceb342f1..8d32d689af 100644
--- a/object.c
+++ b/object.c
@@ -358,7 +358,7 @@ rb_obj_copy_ivar(VALUE dest, VALUE obj)
rb_shape_t *initial_shape = rb_shape_get_shape(dest);
- if (initial_shape->heap_index != src_shape->heap_index) {
+ if (initial_shape->heap_index != src_shape->heap_index || !rb_shape_canonical_p(src_shape)) {
RUBY_ASSERT(initial_shape->type == SHAPE_T_OBJECT);
shape_to_set_on_dest = rb_shape_rebuild_shape(initial_shape, src_shape);