Skip to content

Commit f473f14

Browse files
committed
rb_obj_set_fields forward shape_id
1 parent dccc1c0 commit f473f14

1 file changed

Lines changed: 3 additions & 8 deletions

File tree

variable.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,6 +1275,8 @@ rb_obj_set_fields(VALUE obj, VALUE fields_obj, ID field_name, VALUE original_fie
12751275
rb_imemo_fields_clear(original_fields_obj);
12761276
}
12771277
}
1278+
1279+
RBASIC_SET_SHAPE_ID(obj, RBASIC_SHAPE_ID(fields_obj));
12781280
}
12791281

12801282
void
@@ -1637,7 +1639,6 @@ obj_transition_too_complex(VALUE obj, st_table *table)
16371639
VALUE fields_obj = rb_imemo_fields_new_complex_tbl(rb_obj_class(obj), table);
16381640
RBASIC_SET_SHAPE_ID(fields_obj, shape_id);
16391641
rb_obj_replace_fields(obj, fields_obj, 0);
1640-
RBASIC_SET_SHAPE_ID(obj, shape_id);
16411642
}
16421643
}
16431644

@@ -1889,13 +1890,7 @@ generic_field_set(VALUE obj, shape_id_t target_shape_id, ID field_name, VALUE va
18891890
const VALUE original_fields_obj = rb_obj_fields(obj, field_name);
18901891
VALUE fields_obj = imemo_fields_set(rb_obj_class(obj), original_fields_obj, target_shape_id, field_name, val, false);
18911892

1892-
rb_obj_replace_fields(obj, fields_obj, field_name);
1893-
1894-
if (RBASIC_SHAPE_ID(fields_obj) == target_shape_id) {
1895-
RBASIC_SET_SHAPE_ID(obj, target_shape_id);
1896-
}
1897-
1898-
RUBY_ASSERT(RBASIC_SHAPE_ID(obj) == RBASIC_SHAPE_ID(fields_obj));
1893+
rb_obj_set_fields(obj, fields_obj, field_name, original_fields_obj);
18991894
}
19001895

19011896
static shape_id_t

0 commit comments

Comments
 (0)