mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Use rb_ary_unshare for shared array in rb_ary_replace
rb_ary_unshare will perform FL_UNSET_SHARED and rb_ary_decrement_share.
This commit is contained in:
parent
9cbebdcb74
commit
c445963575
1 changed files with 1 additions and 7 deletions
8
array.c
8
array.c
|
@ -4392,20 +4392,14 @@ rb_ary_replace(VALUE copy, VALUE orig)
|
|||
if (copy == orig) return copy;
|
||||
|
||||
if (RARRAY_LEN(orig) <= RARRAY_EMBED_LEN_MAX) {
|
||||
VALUE shared_root = 0;
|
||||
|
||||
if (ARY_OWNS_HEAP_P(copy)) {
|
||||
ary_heap_free(copy);
|
||||
}
|
||||
else if (ARY_SHARED_P(copy)) {
|
||||
shared_root = ARY_SHARED_ROOT(copy);
|
||||
FL_UNSET_SHARED(copy);
|
||||
rb_ary_unshare(copy);
|
||||
}
|
||||
FL_SET_EMBED(copy);
|
||||
ary_memcpy(copy, 0, RARRAY_LEN(orig), RARRAY_CONST_PTR_TRANSIENT(orig));
|
||||
if (shared_root) {
|
||||
rb_ary_decrement_share(shared_root);
|
||||
}
|
||||
ARY_SET_LEN(copy, RARRAY_LEN(orig));
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Add table
Reference in a new issue