diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-30 08:32:43 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-30 08:32:43 +0000 |
commit | 9b192302ec9449d6374f681c005210c5a62d79ef (patch) | |
tree | fc87e04eb81b1a9b735d3c2ce7ec153cee902dfd /range.c | |
parent | a71d47a380026de99aa64e84684e556937aae521 (diff) | |
download | ruby-9b192302ec9449d6374f681c005210c5a62d79ef.tar.gz |
* time.c (rb_time_succ): make Time#succ obsolete since time is not
a discrete value.
* range.c (discrete_object_p): treat time objects specially to
determine discrete values, since time objects have #succ yet are
discrete (for now at least).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25170 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
-rw-r--r-- | range.c | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -308,6 +308,15 @@ step_i(VALUE i, void *arg) extern int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl); +static int +discrete_object_p(obj) +{ + if (rb_obj_is_kind_of(obj, rb_cTime)) return Qfalse; /* until Time#succ removed */ + if (rb_respond_to(obj, id_succ)) return Qtrue; + return Qfalse; +} + + /* * call-seq: * rng.step(n=1) {| obj | block } => rng @@ -416,7 +425,7 @@ range_step(int argc, VALUE *argv, VALUE range) else { VALUE args[2]; - if (!rb_respond_to(b, id_succ)) { + if (!discrete_object_p(b)) { rb_raise(rb_eTypeError, "can't iterate from %s", rb_obj_classname(b)); } @@ -498,7 +507,7 @@ range_each(VALUE range) rb_block_call(tmp, rb_intern("upto"), 2, args, rb_yield, 0); } else { - if (!rb_respond_to(beg, id_succ)) { + if (!discrete_object_p(beg)) { rb_raise(rb_eTypeError, "can't iterate from %s", rb_obj_classname(beg)); } |