summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--class.c4
-rw-r--r--internal.h2
-rw-r--r--variable.c9
3 files changed, 8 insertions, 7 deletions
diff --git a/class.c b/class.c
index 6b3b6623f1..08e053967a 100644
--- a/class.c
+++ b/class.c
@@ -341,7 +341,7 @@ rb_mod_init_copy(VALUE clone, VALUE orig)
if (RCLASS_IV_TBL(orig)) {
st_data_t id;
- RCLASS_IV_TBL(clone) = rb_st_copy(clone, RCLASS_IV_TBL(orig));
+ rb_iv_tbl_copy(clone, orig);
CONST_ID(id, "__tmp_classpath__");
st_delete(RCLASS_IV_TBL(clone), &id, 0);
CONST_ID(id, "__classpath__");
@@ -394,7 +394,7 @@ rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach)
RCLASS_SET_SUPER(clone, RCLASS_SUPER(klass));
RCLASS_EXT(clone)->allocator = RCLASS_EXT(klass)->allocator;
if (RCLASS_IV_TBL(klass)) {
- RCLASS_IV_TBL(clone) = rb_st_copy(clone, RCLASS_IV_TBL(klass));
+ rb_iv_tbl_copy(clone, klass);
}
if (RCLASS_CONST_TBL(klass)) {
struct clone_const_arg arg;
diff --git a/internal.h b/internal.h
index 6845ba825d..b000feee29 100644
--- a/internal.h
+++ b/internal.h
@@ -2519,7 +2519,7 @@ void rb_mark_generic_ivar(VALUE);
void rb_mv_generic_ivar(VALUE src, VALUE dst);
VALUE rb_const_missing(VALUE klass, VALUE name);
int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
-st_table *rb_st_copy(VALUE obj, struct st_table *orig_tbl);
+void rb_iv_tbl_copy(VALUE dst, VALUE src);
/* gc.c (export) */
VALUE rb_wb_protected_newobj_of(VALUE, VALUE);
diff --git a/variable.c b/variable.c
index 1627467bd9..9fd075c21c 100644
--- a/variable.c
+++ b/variable.c
@@ -3360,12 +3360,13 @@ tbl_copy_i(st_data_t key, st_data_t value, st_data_t data)
return ST_CONTINUE;
}
-st_table *
-rb_st_copy(VALUE obj, struct st_table *orig_tbl)
+void
+rb_iv_tbl_copy(VALUE dst, VALUE src)
{
+ st_table *orig_tbl = RCLASS_IV_TBL(src);
st_table *new_tbl = st_copy(orig_tbl);
- st_foreach(new_tbl, tbl_copy_i, (st_data_t)obj);
- return new_tbl;
+ st_foreach(new_tbl, tbl_copy_i, (st_data_t)dst);
+ RCLASS_IV_TBL(dst) = new_tbl;
}
MJIT_FUNC_EXPORTED rb_const_entry_t *