From e69f2129339e9b13dbce30c0bcfd139b696bf2fe Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 23 Feb 2009 15:46:02 +0000 Subject: [PATCH] * 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 --- ChangeLog | 5 +++++ range.c | 8 ++++---- 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 + + * range.c (range_each): check #succ only when it is really + needed. small performance improvement. + Tue Feb 24 00:19:33 2009 Yukihiro Matsumoto * 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;