That function is a bit too low level to called from multiple places. It's always used in tandem with rb_shape_set_too_complex and both have to know how the object is laid out to update the iv_ptr.
So instead we can provide two higher level function:
rb_obj_copy_ivs_to_hash_table to prepare a st_table from an arbitrary oject.
rb_obj_convert_to_too_complex to assign the new st_table to the old object, and safely free the old iv_ptr.
Unfortunately both can't be combined into one, because rb_obj_copy_ivar need rb_obj_copy_ivs_to_hash_table to copy from one object to another.
Refactor rb_obj_evacuate_ivs_to_hash_table
That function is a bit too low level to called from multiple
places. It's always used in tandem with
rb_shape_set_too_complexand both have to know how the object is laid out to update the
iv_ptr.So instead we can provide two higher level function:
rb_obj_copy_ivs_to_hash_tableto prepare ast_tablefrom anarbitrary oject.
rb_obj_convert_to_too_complexto assign the newst_tableto the old object, and safely free the old
iv_ptr.Unfortunately both can't be combined into one, because
rb_obj_copy_ivarneed
rb_obj_copy_ivs_to_hash_tableto copy from one objectto another.