diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-10-11 08:06:16 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-10-11 08:06:16 +0000 |
commit | 11674f4a3e25b3bb5079d648b7feabe16c25e9b4 (patch) | |
tree | 4c12593af0133eb19660928e704b2e56c2d2debb /array.c | |
parent | 9681d8791b4a85e3dc8acb1a7a5e4e7b2c4d1ac8 (diff) |
* array.c: revert modify check during iteration.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11129 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 34 |
1 files changed, 13 insertions, 21 deletions
@@ -1227,24 +1227,6 @@ rb_ary_insert(int argc, VALUE *argv, VALUE ary) return ary; } -VALUE -each_internal(VALUE ary) -{ - long i; - - for (i=0; i<RARRAY_LEN(ary); i++) { - rb_yield(RARRAY_PTR(ary)[i]); - } - return ary; -} - -static VALUE -iter_unlock(VALUE ary) -{ - FL_UNSET(ary, ARY_TMPLOCK); - return ary; -} - /* * call-seq: * array.each {|item| block } -> array @@ -1263,9 +1245,12 @@ iter_unlock(VALUE ary) VALUE rb_ary_each(VALUE ary) { + long i; + RETURN_ENUMERATOR(ary, 0, 0); - FL_SET(ary, ARY_TMPLOCK); /* prohibit modification during each */ - rb_ensure(each_internal, ary, iter_unlock, ary); + for (i=0; i<RARRAY_LEN(ary); i++) { + rb_yield(RARRAY_PTR(ary)[i]); + } return ary; } @@ -1638,6 +1623,13 @@ sort_internal(VALUE ary) return ary; } +static VALUE +sort_unlock(VALUE ary) +{ + FL_UNSET(ary, ARY_TMPLOCK); + return ary; +} + /* * call-seq: * array.sort! -> array @@ -1660,7 +1652,7 @@ rb_ary_sort_bang(VALUE ary) rb_ary_modify(ary); if (RARRAY_LEN(ary) > 1) { FL_SET(ary, ARY_TMPLOCK); /* prohibit modification during sort */ - rb_ensure(sort_internal, ary, iter_unlock, ary); + rb_ensure(sort_internal, ary, sort_unlock, ary); } return ary; } |