summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-11 05:59:41 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-11 05:59:41 +0000
commit4d49ec8d3f96d2d675cbeb930bd548739e123240 (patch)
treee667e2073525e2806d6108cb8b1150b1bba5f808 /array.c
parentfedfa6e5fac9ffc3b1ac7fbbcbaec39ca0cf54a1 (diff)
* array.c (rb_ary_each): prohibit array modification during each
iteration. [ruby-core:09104] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r--array.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/array.c b/array.c
index e488b556d2..3492f192aa 100644
--- a/array.c
+++ b/array.c
@@ -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