diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | array.c | 7 |
2 files changed, 10 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Sun Jul 18 21:20:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * array.c (rb_ary_clear): no need to duplicate buffer just before + clearing. + Sun Jul 18 16:31:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> * include/ruby/ruby.h (rb_data_type_t): restructured. [ruby-dev:41862] @@ -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; |