summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-11 08:06:16 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-11 08:06:16 +0000
commit11674f4a3e25b3bb5079d648b7feabe16c25e9b4 (patch)
tree4c12593af0133eb19660928e704b2e56c2d2debb /array.c
parent9681d8791b4a85e3dc8acb1a7a5e4e7b2c4d1ac8 (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.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/array.c b/array.c
index d4957a95b3..5adb775207 100644
--- a/array.c
+++ b/array.c
@@ -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;
}