diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-10-11 05:59:41 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-10-11 05:59:41 +0000 |
commit | e4151dcf5b0b87465bee51df0af2e1216a11735f (patch) | |
tree | e667e2073525e2806d6108cb8b1150b1bba5f808 /array.c | |
parent | f26c10330ff78f27836129c9ed05ffb8ae1baa4b (diff) | |
download | ruby-e4151dcf5b0b87465bee51df0af2e1216a11735f.tar.gz ruby-e4151dcf5b0b87465bee51df0af2e1216a11735f.tar.xz ruby-e4151dcf5b0b87465bee51df0af2e1216a11735f.zip |
* array.c (rb_ary_each): prohibit array modification during each
iteration. [ruby-core:09104]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -1245,6 +1245,42 @@ iter_unlock(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; +} + +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 |