diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-12-07 08:41:59 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-12-07 08:41:59 +0000 |
| commit | d2e2d320ab2a679c66edefbaed2c3a785956349e (patch) | |
| tree | 88fbca16ba3c3b802990d969a13a57ec67bb3ab0 /range.c | |
| parent | 46af6e017599c6db1cfd1629c53cd59c6c410c5b (diff) | |
| download | ruby-d2e2d320ab2a679c66edefbaed2c3a785956349e.tar.gz ruby-d2e2d320ab2a679c66edefbaed2c3a785956349e.tar.xz ruby-d2e2d320ab2a679c66edefbaed2c3a785956349e.zip | |
* sprintf.c (rb_f_sprintf): [ruby-dev:27967]
* range.c (range_include): use discrete membership for non Numeric
values, for example, String.
* numeric.c (num_scalar_p): new method. [ruby-dev:27936]
* lib/complex.rb (Complex#scalar?): ditto.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@9654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
| -rw-r--r-- | range.c | 31 |
1 files changed, 20 insertions, 11 deletions
@@ -618,19 +618,28 @@ range_inspect(VALUE range) static VALUE range_include(VALUE range, VALUE val) { - VALUE beg, end; - - beg = rb_ivar_get(range, id_beg); - end = rb_ivar_get(range, id_end); - if (r_le(beg, val)) { - if (EXCL(range)) { - if (r_lt(val, end)) return Qtrue; - } - else { - if (r_le(val, end)) return Qtrue; + VALUE beg = rb_ivar_get(range, id_beg); + VALUE end = rb_ivar_get(range, id_end); + VALUE tmp; + int nv = FIXNUM_P(beg) || FIXNUM_P(end) || + rb_obj_is_kind_of(beg, rb_cNumeric) || + rb_obj_is_kind_of(end, rb_cNumeric); + + if (nv) { + numeric_range: + if (r_le(beg, val)) { + if (EXCL(range)) { + if (r_lt(val, end)) return Qtrue; + } + else { + if (r_le(val, end)) return Qtrue; + } } } - return Qfalse; + if (!NIL_P(rb_check_to_integer(beg, "to_int")) || + !NIL_P(rb_check_to_integer(end, "to_int"))) + goto numeric_range; + return rb_call_super(1, &val); } |
