diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-07-18 12:20:14 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-07-18 12:20:14 +0000 |
commit | 10a90fbce86c20f98dc4499eb0a34d9f347fdd29 (patch) | |
tree | b083e526dd6a1e3cfac8fb3649ecb4c4e45e40d5 /array.c | |
parent | 25b9eb5e5746665ca098f7117ba207692b2bd78d (diff) |
* array.c (rb_ary_clear): no need to duplicate buffer just before
clearing.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -2772,9 +2772,12 @@ rb_ary_replace(VALUE copy, VALUE orig) VALUE rb_ary_clear(VALUE ary) { - rb_ary_modify(ary); + rb_ary_modify_check(ary); ARY_SET_LEN(ary, 0); - if (ARY_DEFAULT_SIZE * 2 < ARY_CAPA(ary)) { + if (ARY_SHARED_P(ary)) { + rb_ary_unshare(ary); + } + else if (ARY_DEFAULT_SIZE * 2 < ARY_CAPA(ary)) { ary_resize_capa(ary, ARY_DEFAULT_SIZE * 2); } return ary; |