summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-23 15:46:02 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-23 15:46:02 +0000
commite69f2129339e9b13dbce30c0bcfd139b696bf2fe (patch)
tree7bac4862a60a8adac7e4f3153eb34844759687a8
parent20f46281698c368b2dfda69cd77f87b11876b552 (diff)
* range.c (range_each): check #succ only when it is really
needed. small performance improvement. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--range.c8
2 files changed, 9 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 56f53ec9f0..e78c50ceb5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Feb 24 00:24:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_each): check #succ only when it is really
+ needed. small performance improvement.
+
Tue Feb 24 00:19:33 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
* lib/pathname.rb (Pathname#foreachline): removed wrongly
diff --git a/range.c b/range.c
index 6e0af8679e..02a75e7009 100644
--- a/range.c
+++ b/range.c
@@ -417,10 +417,6 @@ range_each(VALUE range)
beg = RANGE_BEG(range);
end = RANGE_END(range);
- if (!rb_respond_to(beg, id_succ)) {
- rb_raise(rb_eTypeError, "can't iterate from %s",
- rb_obj_classname(beg));
- }
if (FIXNUM_P(beg) && FIXNUM_P(end)) { /* fixnums are special */
long lim = FIX2LONG(end);
long i;
@@ -439,6 +435,10 @@ range_each(VALUE range)
rb_block_call(beg, rb_intern("upto"), 2, args, rb_yield, 0);
}
else {
+ if (!rb_respond_to(beg, id_succ)) {
+ rb_raise(rb_eTypeError, "can't iterate from %s",
+ rb_obj_classname(beg));
+ }
range_each_func(range, each_i, NULL);
}
return range;